[]

Çok basit IF - ELSE sorusu

{
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  (30.05.16 03:12:04) 
x<5 kosulu saglanmadigindan if statementi icerisine girmiyor, bu yuzden ilk iki printf es geciliyor ve sondaki printf calisiyor.


  • ubi dubium ibi libertas  (30.05.16 03:12:11) 
ö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  (30.05.16 03:26:17 ~ 03:27:43) 
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  (30.05.16 09:25:49) 
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  (30.05.16 11:02:29 ~ 11:05:10) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.