For döngüsü ile ilgili bir soru

0 beğenilme 0 beğenilmeme
56 kez görüntülendi
For döngüsünün koşul kısmına mantıksal bir ifade koymayıp onun yerine değişken ataması yaptığımızda döngü çalışıyor ve sonsuz döngüye giriyor.

for(int q=-2;q=-5;q+=3){
      printf("%d",q); //q nun değerini yazdır
      break;
}
ekrana -5 basıyor ve break yazdığımız için bitiyor ama break yazmazsak sonsuz döngüye giriyor.
for(int q=-2;q=0;q+=3){
      printf("%d",q); //q nun değerini yazdır
      break;
}
dediğimde ise döngü çalışmıyor (tek farkı -5 yerine 0 yazmış olmam) bunun nedeni nedir? Döngüler niye böyle çalışıyor?
28, Nisan, 28 Uygulamalı Bilgisayar Bilimi kategorisinde 12asdf_1234 (18 puan) tarafından  soruldu

Bildiğim kadarıyla ikinci bölge koşul kısımı.

for ( atama_ifadeleri; çalışma_şartı ; sayaç_artırma_azaltma_ifadeleri)

{

       komut1;

       .......

       komutn;

}

C 'de yeni dillerin aksine boolean sonuçları biraz farklıdır.

0 ifadesi False Döndürür.

!0 ifadesi True Döndürür.Yani 0'a eşit olmayan her sayı True döndürür.

örneğin:

while(1){

     komut;

}

 sonsuz döngüye girer çünkü koşul her zaman 1 olacaktır.

ama eğer şöyle olsaydı

int n = 7;

int sonuç = 1;

while (n == 1)

{


    sonuç *= n;

    n -= 1;

}

bu döngü n = 1 olduğu takdirde son bulacaktır.


Kısacası her Boolean ifade Ya 0 yada 0'a eşit olmayan bir sayı döndürür.

Ve bu for döngüsündeki ikinci kısım boolean ifadesi barındıran bölümdür.Sen onu sıfıra eşitlediğin için döngü çalışmaz.


Döngünün koşul kısmında bool ifade bulunması gerekiyor, ama bool bir ifade yerine bir değişkenin değeri değiştirilmiş q=-5 yapılmış. q==-5 olsaydı bool bir ifade olurdu ve 0 kabul edip dönmezdi ama çift eşittir koymamış. Derleyici atama işlemini 1 kabul etmiş. 

Evet ,bende şimdi fark ettim kusura bakma.

Tam emin değilim fakat bildiğim şu ki

Eğer tek '=' tanımlama , '==' ise bool oluyor.

sanırsam bu koşul kısmında hem q'ya değer ataması yapıyor hem de q'yu koşul alıyor.

Yani 

for(int q=-5;q;q+=3){
      printf("%d",q); 

      break;
}

olurdu.Öyle olmalı ki 
for(int q=-2;q=0;q+=3){
      printf("%d",q); 
      break;
}
sonucu döngü çalışmasın.Yani tahminim bu.
İlgi çekici.

Evet haklısın koşul kısmında hem değer ataması yapıyor hem de q'nun değerini koşul olarak kabul ediyor, en mantıklı açıklama bu. 0 dışındaki değerler doğru kabul edildiği için sonsuz döngüye girdi, 0 yaptığımda ise çalışmadı.

Benim bilgisayar bilgim pek iyi degil ama garip olan ilk degerdeki -2'yi calistirmamasi degil mi? Mesela alttakinde -2 ile calisiyor. 

  for( a = -2;; a+=3 ){
      printf("%d\n", a);
      break;
}

...