08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

Virgül işlecinin sol terimi olan ifadenin daha önce yapılmasının güvence altında olduğunu<br />

biliyorsunuz. Yukarıdaki main işlevinde yer alan while döngüsünün kontrol ifadesine<br />

bakalım:<br />

while (ch = getch(), toupper(ch) != 'Q')<br />

Önce virgül işlecinin sol terimi olan ifade yapılacağına göre, getch işlevi çağrılır.<br />

Klavyeden alınan karakterin kod numarası ch değişkenine atanır. Daha sonra toupper<br />

işlevinin çağrılmasıyla, ch değişkeni değerinin'Q' karakteri olup olmadığı sınanır. Virgül<br />

işlecinin ürettiği değerin, sağ teriminin değeri olduğunu anımsayın. Bu durumda<br />

döngünün sürdürülmesi hakkında söz sahibi olan ifade<br />

toupper(ch) != 'Q'<br />

ifadesidir. Yani döngü ch 'Q' veya 'q' dışında büyük harf karakteri olduğu sürece döner.<br />

Kontrol ifadesini bir değişken de oluşturabilir:<br />

while (x) {<br />

/***/<br />

}<br />

Yukarıdaki döngü, x değişkeni sıfırdan farklı bir değere sahip olduğu sürece döner.<br />

Kontrol ifadesi bir değişmez de olabilir:<br />

while (1) {<br />

/***/<br />

}<br />

Yukarıdaki while deyiminde kontrol ifadesi olarak 1 değişmezi kullanılıyor. 1 sıfır dışı bir<br />

değer olduğundan, yani kontrol ifadesi bir değişkene bağlı olarak değişmediğinden, böyle<br />

bir döngüden koşul ifadesinin yanlış olmasıyla çıkılamaz. Bu tür döngülere sonsuz döngü<br />

(infinite loops) denir. Sonsuz döngüler programcının bir hatası sonucu oluşabildiği gibi,<br />

bilinçli olarak, yani belirli bir amacı gerçekleştirmek için de oluşturulabilir. while ayracı<br />

içine 1 değişmez değerinin olduğu while döngüsü, bilinçli olarak oluşturulmuş bir sonsuz<br />

döngü deyimidir.<br />

Atama işlecinin kontrol ifadesi içinde kullanılması da, sık rastlanan bir durumdur:<br />

while ((val = get_value()) > 0) {<br />

foo(val);<br />

/***/<br />

}<br />

Yukarıdaki while döngüsünde get_value işlevinin geri dönüş değeri, val isimli değişkene<br />

atanıyor. Atama işleci ile oluşturulan ifade öncelik ayracı içine alındığını görüyorsunuz.<br />

Atama işlecinin ürettiği değer, nesneye atanan değer olduğundan, büyüktür işlecinin sol<br />

terimi yine get_value işlevinin geri dönüş değeridir. Bu durumda döngü get_value<br />

işlevinin geri dönüş değeri, 0'dan büyük olduğu sürece döner. Döngü gövdesi içinde<br />

çağrılan foo işlevine val değerinin argüman olarak gönderildiğini görüyorsunuz. foo işlevi,<br />

get_value işlevinin geri dönüş değeri ile çağrılmış olur.<br />

break Deyimi<br />

break anahtar sözcüğünü doğrudan sonlandırıcı atom izler:<br />

break;<br />

139/529

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!