C Programlama Sorusu ? (Çözüldü)

Kodla Büyü

miraz

Seçkin Üye
Seçkin Üye
Mesajlar
531
#include <stdio.h>
int main(void) {
int a;
a=10;
if (a == a--)
printf("X");

a=10;
if (a == --a)
printf("Y");
return 0;
}​


Yukarıdaki kodlar hangi çıktıyı verir?
C bilgisi olan ilgilenebilirse sevinirim. Mantığını çözemedim bir türlü.
 
Son düzenleme:
Adsız.png


Kodun çıktısı bu hocam
 
Farkli derleyicilerde denedim. Bazi derleyiciler X, bazilari Y, bazilari da XY ciktisi veriyor.

== kullaniminda islem soldan sağa mı isliyor acaba?
 
işlem Y çıkar gençler nedeni ise değişkenden önce -- ++ kullanırsanız if şartından önce o değeri değişkene atar ve öyle karşılaştırır. Sonra yazarsanız if şartı içerisinde a değeri 10 olur sonra değişkenin değerini bir azaltır değeri dokuz olur bu durumda şart doğru olmadığı için X yazmazzzz
 
a=10;
if (a == --a)
printf("Y");
Burada -- eksiltme operatörü a değişkeninden önce kullanıldığı için a'nın değeri önce düşürülecek, a==9 sorgusu yapılacak ve yanlış olduğundan Y yazmayacak.

a=10;
if (a == a--)
printf("X");
Burada ise a==10 sorgusu yapılıyor ve doğru olduğundan a'nın değeri bir azaltılıp ekrana X yazdırılıyor.

Nereyi atlıyorum acaba sayın hocam?

Geriye tek bir tahminim kalıyor. Normalde soldan sağa olan işleyiş sırası, if sorgulamasında ters yönde mi yapılıyor acaba?
 
Son düzenleme:
Önce karşılaştırma işleminin soluna bakar, değeri alır.
a = 10 ise
10 == değer olur.
Sonra karşılaştırmanın sağına bakar. Eğer (++a ya da --a) ise önce işlemi yapar sonra karşılaştırmayı yapar.
--a ise değer 9'a düşer ve karşılaştırma yapar.
10 == 9 false döner.
Eğer (a++ ya da a--) ise önce karşılaştırma yapar, sonra işlemi yapar.
a -- ise;
10 == 10 olur, karşılaştırma true döner,
sonra a 9'a düşer.

Şimdi chrome'da ctrl+shift+j ile console açın ve aşağıdaki kodu yapıştırın:
Kod:
a=10;
if (a == a--)
console.log("X");

a=10;
if (a == --a)
console.log("Y");

sonuç x dönecektir.
 
Çıktı olarak X yazacaktır, çünkü ilk if yapısında karşılaştırma yapıldıktan sonra eksiltme işlemi gerçekleşiyor(true). ikincide ise önce eksiltiyor sonra karşılaştırma yapıyor(false).
 
Arkadaşlar ben de ekrana X yazdırılır diye biliyorum. Fakat pek çok derleyicide ekran çıktısı Y veriyor.
Bilgisayarımda Dev-C++ yüklü ve Y çıktısı veriyor.

Ama ilginç olan şu. http://rextester.com sitesinde 3 adet C derleyicisi var.
C(gcc) derleyicisi Y çıktısı verirken,
C (C lang) derleyicisi X çıktısı,
c (vc) derleyicisi ise XY çıktısı veriyor.

Bambaşka sonuçlar veriyor herbiri. Hangisi doğru acaba?
 
Geri
Üst