Sıçrama Komutları

Sıçrama komutları programın bir kısmındaki kodları yok sayıp başka bir noktaya sıçramaya yarayan komutlardır. C'deki sıçrama komutları gotobreak ve continue komutlarıdır. Bunların dışında return komutu ve exit( ) fonksiyonu da sıçrama komutlarından sayılabilmektedir.


return

return komutu bir fonksiyonun değer almasını sağlar. Bu işlem gerçekleştikten sonra kod içerisinde fonksiyonun çağrıldığı noktaya dönüleceği için return komutu da bir sıçrama komutu sayılabilmektedir.

#include <stdio.h>
int fact(int x);

int main(void){
    int a=3;
    a=a*fact(4);
    printf("%d",a);
    return 0;
}
int fact(int x){
    int y=1;
    while(x){
        y=y*x;
        x--;
    }
    return y;
}

Yukarıdaki kodu inceleyelim. Faktoriyel hesaplayan fact fonksiyonu ve a değişkeni ilan edildikten sonra a değişkenine "a*fact(4)" değeri atanmıştır. Kodun bu kısmında fact fonksiyonuna gidilecektir ve fonksiyon içinde x 4 değerini alacaktır. Faktoriyel hesaplandıktan sonra return komutu fact(4)'e 24 değerini verecektir ve kodda tekrardan "a=a*fact(4);" kısmına dönülecektir.

Bir fonksiyon içinde iki return birden kullanılabilir fakat ilk return komutundan sonra sıçrama işlemi gerçekleşeceği için daha alttaki kodların programın boyutunu büyütmekten başka bir etkisi olmayacaktır. Yukarıdaki örneği biraz değiştirerek alttaki kodu oluşturmamız programın işleyişinde hiçbir değişikliğe neden olmayacaktır.

#include <stdio.h>
int fact(int x);

int main(void){
    int a=3;
    a=a*fact(4);
    printf("%d",a);
    return 0;
}
int fact(int x){
    int y=1;
    while(x){
        y=y*x;
        x--;
    }
    return y;
    y=0;
    return y;
}

void olarak ilan edilen fonksiyonlarda return komutu bir değer ile birlikte kullanılmamalıdır. Eğer void olmayan bir fonksiyonda hiç return komutu kullanılmazsa fonksiyon son } işaretiyle birlikte bilinmeyen bir değer alır.


goto

goto komutunun kullanımı pratikte çok az olmakla birlikte genel yapı şöyledir:

goto etiket;

Burada bilinmesi gereken bir şey de goto komutunu kullanabilmek için komutun kullanıldığı fonksiyon içinde bir etiketin de bulunması gerektiğidir. Etiket belirli bir kod parçasını "isim:" yapısıyla etiketlemeye yarar. goto komutunun kullanıldığı yerde belirtilen etiketteki koda gidilir.

#include <stdio.h>

int main(void){
    int a;
    printf("a=");
    scanf("%d",&a);
    if(a>10)
        goto last;
    a=10;
    printf("First %d\n",a);
    last:{
        a=2*a;
        printf("Last %d\n",a);
    }
    return 0;
}

Yukarıdaki örnekte a değişkeni tanımlanmıştır. Daha sonra scanf kullanılarak a'ya değer istenmiştir. a'nin değerinin 10'dan büyük olması durumunda kodların bir kısmı atlanmakta ve last diye etiketlenen kod parçasına gidilmektedir. Programa 10'dan büyük ve küçük a değerleri vererek çalışmasını inceleyebilirsiniz. 10'dan büyük değerler için "a=10;" ve "printf("First: %d\n",a);" satırları çalıştırılmayacaktır. Etiket goto komutundan önce de sonra da tanımlanabilir. Her halukarda goto komutundan sonra oradaki kodlara gidilecektir.


break

break komutu ise belirli bir bloktaki kodun iptal edilmesini sağlar. Misalen bu komut switch-case yapısında her durumda case'lerin sadece birinin çalışması istendiğinde veya belirli bir durumda bir döngünün durdurulması istendiğinde kullanılabilir. break komutu sadece iterasyon komutlarıyla ve switch komutuyla kullanılabilir.

Aşağıdaki örnekler farklı durumları göstermektedir.

#include <stdio.h>

int main(void){
    int a;
    scanf("%d",&a);
    switch(a){
        case 1:
        printf("One");
        break;
        case 2:
        printf("Two");
        break;
        case 3:
        printf("Three");
        break;
        default:
        printf("Other");
        break;
    }
    return 0;
}

Bu kodda her durumda yalnızca tek case'in altındaki kod parçası çalışacaktır. Normaldeki gibi doğru case bulunduktan sonraki bütün kodlar çalıştırılmayacaktır. 

#include <stdio.h>

int main(void){
    int a;
    scanf("%d",&a);
    for(;a<100;a++){
        printf("%d\n",a);
        if(a==10){
            break;
        }
    }
    return 0;
}

Bu örnekte değişkenin belirli bir değere gelmesi sonucunda döngüden çıkılması sağlanmıştır. Örnekte break komutunun etkisini görebilmek için a'ya değer olarak 10'dan küçük bir sayı girilmelidir.


continue

continue komutu da iterasyon komutları ile kullanılan break'e benzer bir komuttur. Fakat break gibi döngüyü tamamen sonlandırmayıp bir sonraki adıma geçilmesine sebep olur.

#include <stdio.h>

int main(void){
    int a=0;
    int b=0;
    while(a<10){
        a++;
        if(a==3){
            continue;
        }
        b++;
        printf("%d\n",a*b);
    }
    return 0;
}

Normalde continue komutu kullanılmasaydı çıktı olarak 1'den 9'a kadar olan sayıların karelerini görecektik. Fakat a 3 olduktan sonra döngü bir adımlığına durdurulup başa alınmış ve bu da karşımıza farklı bir çıktı grubunun çıkmasına neden olmuştur.


exit( )

Son sıçrama komutu sayılabilecek ifademiz ise exit( ) fonksiyonudur. Bu fonksiyonu kullanmak için fonksiyona bir tam sayı değeri girilmelidir. Fonksiyon çalıştığı anda program sonlanır. Genelde bir hata sonucu çıkma işlemi olduğunu belirtme amacıyla 0'dan farklı değerler kullanılır.

#include <stdio.h>

int main(void){
    int a=0;
    int b=0;
    while(a<10){
        a++;
        b++;
        printf("%d\n",a*b);
        if(a*b>25){
            exit(1);
        }
    }
    return 0;
}

Bu program a*b değerinin 25'i geçtiği tespit edildikten sonra sonlandırılacaktır.




İterasyon Komutları <<<<< Temel C >>>>> Diziler