08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

Yukarıdaki işlev içinde iç içe üç ayrı döngü deyimi yer alıyor. En içteki döngünün içinde<br />

çağrılan bir işlev ile bir sınama işlemi yapılmış, sınamanın olumsuz sonuçlanması<br />

durumunda, programın akışı en dıştaki döngü deyiminin sonrasına yönlendiriliyor.<br />

Oysa goto deyimi kullanmasaydı, ancak bir bayrak (flag) değişkenin kullanılmasıyla aynı<br />

amaç gerçekleştirilebilirdi. Her döngünün çıkışında bayrak olarak kullanılan değişkenin<br />

değerinin değiştirilip değiştirilmediği sınanmak zorunda kalınırdı.<br />

#include <br />

#define BREAK 0<br />

#define NO_BREAK 1<br />

int test_func(int val);<br />

int main()<br />

{<br />

int i, j, k;<br />

int flag = NO_BREAK;<br />

for (i = 0; i < 100; ++i) {<br />

for (j = 0; j < 100; ++j) {<br />

for (k = 0; k < 20; ++k) {<br />

/*...*/<br />

if (!test_func(k)) {<br />

flag = BREAK;<br />

break;<br />

}<br />

/*...*/<br />

}<br />

if (flag == BREAK)<br />

break;<br />

}<br />

if (flag == BREAK)<br />

break;<br />

}<br />

printf("döngü dışındaki ilk deyim\n");<br />

}<br />

return 0;<br />

goto deyiminin kullanılması okunabilirlik yönünden daha iyidir.<br />

Aşağıdaki örnekte ise goto deyimiyle hem switch deyiminden hem de switch deyiminin<br />

içinde bulunduğu for döngüsünden çıkılıyor:<br />

#define ADDREC 1<br />

#define LISTREC 2<br />

#define DELREC 3<br />

#define SORTREC 4<br />

#define EXITPROG 5<br />

int get_option(void);<br />

void add_rec(void);<br />

void list_rec(void);<br />

void del_rec(void);<br />

void sort_rec(void);<br />

int main()<br />

{<br />

int option;<br />

187/529

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

Saved successfully!

Ooh no, something went wrong!