GöreceÄŸimiz ikinci döngü çeÅŸidi, do while döngüsüdür. Yaptığı iÅŸ, while ile hemen hemen aynıdır; verilen iÅŸi, döngü koÅŸulu bozulana kadar sürdürür. Ancak while’a göre önemli bir farkı vardır.
while döngülerinde, döngü içersindeki işlem yapılmadan önce, sunulan koşul kontrol edilir. Şayet koşul sağlanmıyorsa, o while döngüsünün hiç çalışmama ihtimali de bulunmaktadır. do while döngülerindeyse, durum böyle değildir. İlk çalışmada koşul kontrolü yapılmaz. Dolayısıyla, her ne şartta olursa olsun, döngünüz -en azından bir kere- çalışacaktır.
Bazı durumlarda, döngü bloğu içersindeki kodların en azından bir kere çalışması gerektiğinden, do while yapısı kullanılır. do while ile ilgili genel yapıyı ve akış şemasını aşağıda bulabilirsiniz:
| do while Yapısı |
do while Akış Diyagramı |
do {
komut(lar)
} while( koÅŸul );
|
|
Önce Merhaba Dünya örneğimizi yapalım:
#include<stdio.h>
int main( void )
{
int i = 0;
do {
//Önce i'nin değeri arttırılıyor
//sonra ekrana Merhaba Dünya yazdırılıyor.
printf("%2d: Merhaba Dünya\n",++i);
} while( i < 10 );
return 0;
}
Gördüğünüz gibi, bir önceki örneÄŸimize oldukça benzer bir yapıda, yazıldı. Tek fark i’nin deÄŸeri 0′da olsa, 1000′de olsa, en azından bir kez Merhaba Dünya’nın yazılacak olmasıdır. Ancak while’de kontrol önce yapıldığı için, hiçbir ÅŸey ekrana yazılmaz.
Åžimdi do while’in kullanılmasının daha mantıklı olacağı bir program yapalım. Kullanıcıdan iki sayı alınsın. Bu iki sayı toplandıktan sonra, sonucu ekrana yazdırılsın. Yazdırma sonunda “Devam etmek istiyor musunuz?” sorusu sorulsun ve klavyeden ‘E’ veya ‘e’ karakterlerinden birisi girilirse, program devam etsin. Yok farklı birÅŸey girilirse, program sonlandırılsın. Örnek programımızı aÅŸağıda bulabilirsiniz:
#include<stdio.h>
int main( void )
{
int sayi_1, sayi_2;
char devam_mi;
do {
printf("Birinci sayıyı giriniz> ");
scanf("%d",&sayi_1);
printf("İkinci sayıyı giriniz> ");
scanf("%d",&sayi_2);
printf("%d + %d = %d\n", sayi_1, sayi_2, sayi_1 + sayi_2);
printf("Devam etmek ister misiniz? ");
//C'de tek karakter okuma işlemi biraz sıkıntılı
//olduğundan, burada da bir do while kullandık.
do {
scanf("%c",&devam_mi);
}while( devam_mi == '\n' );
printf("\n");
} while( devam_mi == 'E' || devam_mi == 'e' );
return 0;
}
Program, kullanıcıdan iki sayı alıp, toplamını ekrana bastıktan sonra, yeniden iÅŸlem yapıp yapmak istemediÄŸimizi sormaktadır. Bu programı while ile de yazabilirdik. Ancak while ile yazabilmek için, devam_mi deÄŸiÅŸkenine önceden ‘E’ deÄŸerini atamamız gerekmekteydi. do while döngüsündeyse, bu zorunluluÄŸa gerek kalmamıştır.
Not: Yukardaki programda, farketmiÅŸ olduÄŸunuz gibi karakter okumayı biraz farklı yaptık. Normalde, scanf(  ) fonksiyonunu kullanmak yeterliyken, burada, iÅŸin içine bir de, do while girdi. Açıklayacak olursak, C’de karakter okumaları, biraz sıkıntılıdır. EÄŸer giriÅŸ tampon belleÄŸinde (Buffer) veri bulunuyorsa, bu direkt karaktere atanır. Bundan kurtulmak için birçok yöntem olduÄŸu gibi, uygulanabilecek bir yöntem de, yukarda yazılmış olan döngü ÅŸeklinde deÄŸer almaktır. Çünkü siz daha bir ÅŸey girmeden, ilk deÄŸer ‘\n’ geleceÄŸinden, döngünün ikinci çalışmasında, doÄŸru deÄŸer atanacaktır. İlerki konularda, daha detaylı ele alacağımız bir problem olarak ÅŸimdilik önemsemeyelim. Sadece karakter okuyacağınız zaman problem çıkarsa, yukardaki gibi bir yöntem uygulanabileceÄŸini bilmeniz -ÅŸimdilik- yeterli.
Yorumlar
Yorum Yok
Yorumunuzu Ekleyin
Yorum eklemek için giris yapmalısınız.