2.7. for
Deyimi Ve Virgül İşleci
for
deyimi,
for
anahtar sözcüğü, arkasında parantez
içinde iki noktalı virgülle ayrılmış üç ifade ve ondan sonra gelen bir
deyimden oluşur. İfadelerden herhangi biri var olmayabilir, ancak noktalı
virgüller bulunmalıdır. for
deyiminin nasıl işlediğini
anlatmanın en iyi yolu, eşdeğer bir while
deyimi ile
onu ifade etmektir. Şimdi, eğer
for (ifade_1opt ; ifade_2opt ; ifade_3opt ) deyim
şeklinde bir deyimimiz varsa,
ifade_1; while (ifade_2) { deyim ifade_3; }
deyimi, for
deyimi ile aynı işi yapacaktır. Eğer for
deyimindeki
ifade_2 boşsa, sürekli olarak doğru olduğu şeklinde yorumlanacak ve
sonsuz bir döngünüz olacaktır.
İfade_1’in döngüyü kontrol eden değişkenleri ilklemek için;
ifade_2’nin döngüyü devam ettirmek için gereken koşulları belirlemede;
ifade_3’ün de döngü içindeki bazı değişkenlerin değerlerini
değiştirmede kullanılacağına dikkat edin. Örnek:
for (i=0; i<n; i++) { dizi[i] = 0; printf("Dizinin %d nolu elemanina 0 atanmistir.\n", i); }
Bu, basitçe, dizi
dizisinin ilk
n
elemanına sıfır atar ve n
sayıda satır görüntüler.
for
deyimine bir başka örnek ise şöyledir:
for (bosluklar=0; getchar()==' '; bosluklar++) ;
Bu deyim girdi akışındaki boşlukları sayar. Bu
durumda, parantez içine alınmış olan ifadelerin gereken her şeyi yaptığına ve
tekrarlanan deyimin boş deyim olduğuna dikkat ediniz.
for
’un deyiminin boş olduğunu vurgulamak
için, noktalı virgül ikinci satıra yazılmıştır. Sık yapılan hatalardan bir
tanesi de for
deyiminin sağ
parantezinin hemen arkasına noktalı virgül koymak, böylece deyimi tek
bir seferde yürütülecek normal bir deyim haline getirmektir.
Bazen, for
deyiminde
ifade_1 ve ifade_3 adını verdiğimiz yerlerde birden fazla
ifadenin bulunması daha uygun olabilir. Örneğin, iki tane sayacımızın
bulunduğunu ve döngüden herhangi birisinin sıfır olduğu zaman çıkmamızın
gerektiği bir durumu düşünün. Bunu yapmanın başka yöntemleri de vardır, ama
aşağıdaki deyim en iyilerindendir:
for ( ; sayac_1 && sayac_2; sayac_1--, sayac_2--) {
…
}
Bu, virgül işlecinin en çok kullanıldığı yerlerden biridir. Gördüğünüz gibi, virgül işleci iki ifadeden tek bir ifade oluşturmaya yarar. Her zaman ikinci işlenenden önce ilk işleneni hesaplar ve soldan sağa birleşir. Sonucu ise sadece ikinci ifadenin değeridir. Sonucun tipi de ikinci ifadenin tipiyle aynıdır. Virgül işleci, C’nin işleçleri arasında en düşük önceliğe sahiptir.
Virgül karakterinin, C dilinde başka amaçlar için de kullanıldığına dikkat ediniz. Bildirimlerde değişken isimlerini ayırmak buna bir örnektir. Bu durumlarda, söz konusu olanın bir ayırıcı değil de, bir işleç olduğunu belirtmek için virgül ifadesi parantezler içine alınmalıdır.
C standardında, ifade_1’in olduğu yerde değişken tanımı da yapılabilir.
Tanımlanan değişkenler sadece for
döngüsü içinde
geçerlidir. Döngü bittiğinde kaybolurlar. Örneğin, yukarıdaki ilk örnekte,
eğer i
değişkenine for
döngüsü sona
erdikten sonra ihtiyacımız yoksa, şu şekilde de yazılabilir:
for (int i=0; i<n; i++) { dizi[i] = 0; printf("Dizinin %d nolu elemanina 0 atanmistir.\n", i); }