{
1. int x=11,y=9;
2.
3. if(x<5)
4. if(y>8)
5. printf("*****\n");
6.
7. else
8. printf("#####\n");
9. printf("&&&&&\n");
10. return 0;
}

bu kod bloğu koşturulduğunda çıktı olarak "&&&&&" çıkıyor sadece.

if, else if, else de öncelik neye göre yapılıyor bir çok örnek baktım tam kavrayamadım. kısaca açıklar mısınız?

örneğin 3. satırda ki şart sağlanmadığı için direkt 9. satıra geçilir gibi.

 

İlk önce x2e bakıyor 5'ten küçük mü diye ve değil. Bu yüzden y>8 kısmı (4. satır) çalışmıyor. 4. satıra hiç girmiyor. Ayrıca o else de y>8'in else'i.

Aslında indentation yapılırsa kod şöyle görünecek

if(x<5)
if (y>8) printf("*****\n");
else printf("#####\n");
printf("&&&&&\n");

Dolayısıyla x'5ten küçük olmadığı için 9. satıra kadar komple çalışmıyor. Peki 9. satırın çalışma nedeni ne?

if ve else'lerde {} blokları kullanılmıyorsa, o if-else koşulları sadece bir satırlık komutlardan oluşuyor demektir. Yani x 5'ten küçükse y'ye ait if else döngüsüne girecek. y de 8'den büyükse ***** yazdıracak, y 8'den küçükse veya 8 ise ##### yazdıracak. Ancak x 5'ten küçük olmadığı için onların hiçbiri çalışmadı. Bu şekilde if x<5 kapandı ve 9. satırda if döngüsünden tamamen kurtulundu. 9. satırda artık ana fonksiyondayız ve bir şeyin koşulu olmaksızın &&&&& yazdırıyoruz.

aychovsky

x<5 kosulu saglanmadigindan if statementi icerisine girmiyor, bu yuzden ilk iki printf es geciliyor ve sondaki printf calisiyor.

ubi dubium ibi libertas

özellikle parantezsiz yazdım, çünkü sınavda böyle çıkıyor.

if komutu sağlanmadığında else komutu da otomatik olarak pas geçiliyor bu durumda? ben önce if sonra else if sonra else komutuna bakılacak şekilde şartlandırmıştım kendimi.

seni sevenleri bir kere uzdun

Bence

Hem x<5 oldugunda VE y>8 oldugunda yani ikisi ayni andaysa and koyacaksin.


If (x<5 && y>8)
printf ("*****"\n)

Else
Printf ("&&&&&"\n)


Yani bu kosullarda x=11, y=9da x if kosulunu saglamadigindan direkt &&&& olan (else sonucunu) ekrana yazacak.

Istedigin bu muyduu:/

kuehles blondes

if sağlanmadığı için else'e geçmememizlik etmiyor. Önce if'e sonra else'e bakalır. Burada atlamanın sebebi çok farklı. if ve else y için var, y kontrolü de x'e bağlı.

Eğer x 5'ten küçükse, y'yi kontrol et. y 8'den büyükse ***** yazdır, y 8 veya 8'den küçükse, ##### yazdır.

Burada x 5'ten büyük olduğu için y'yi kontrol etmiyor hiç. Hiçbir şeye bağlı olmayan &&&&&'i yazdırıyor.

aychovsky
1

mobil görünümden çık