Arama butonu
Bu konudaki kullanıcılar: 1 misafir
8
Cevap
550
Tıklama
0
Öne Çıkarma
C sorusu
E
11 yıl
Onbaşı
Konu Sahibi

Arkadaşlar soru şu. Program 0-10 arasında rastgele sayı tutucak bildikten sonra Y derse aynen tekrar başlayacak. Ama şu program excelent dedikten sonra Y yapınca tekrar excellent yazıyor. Nedenini bir türlü anlayamadım.

 #include<stdio.h> 
#include<time.h>
#include<stdlib.h>

int main(){

int number,a;
char k;

srand(time(0));
number=rand()%11;


while(1){
scanf("%d",&a);

if(a>number)
printf("big");
else if(a<number)
printf("low");

else if (a==number){
printf("excellent");
scanf("%c",&k);



if(k=='Y')
number=rand()%11;
else if(k=='N')
break;

}




}



getch();
return 0;


}

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



K
11 yıl
Yüzbaşı

döngünün başında k=null; diyerek içini boşaltmalısın ya da farklı bir değer vermelisin aksi takdirde hep Y olarak kalır.


Bu mesaja 1 cevap geldi.
E
11 yıl
Onbaşı
Konu Sahibi

quote:

Orijinalden alıntı: keftar

döngünün başında k=null; diyerek içini boşaltmalısın ya da farklı bir değer vermelisin aksi takdirde hep Y olarak kalır.

Abi ne alakası var if'in içinde if var. Kaldı ki o ife girmeden önce scanf'le k'yı alıyorum zaten. Sorun başka bişey


Bu mesaja 2 cevap geldi.
M
11 yıl
Yüzbaşı

printf("excellent");


satırından sonra

fflush();


yapmayı dene bakalım.


Bu mesaja 1 cevap geldi.
K
11 yıl
Yüzbaşı

quote:

Orijinalden alıntı: emregul.1994

quote:

Orijinalden alıntı: keftar

döngünün başında k=null; diyerek içini boşaltmalısın ya da farklı bir değer vermelisin aksi takdirde hep Y olarak kalır.

Abi ne alakası var if'in içinde if var. Kaldı ki o ife girmeden önce scanf'le k'yı alıyorum zaten. Sorun başka bişey

haklısın yanlış görmüşüm, kod düzgün görünüyor sorunu bulamadım



E
11 yıl
Onbaşı
Konu Sahibi

quote:

Orijinalden alıntı: MyaspM

printf("excellent");


satırından sonra

fflush();


yapmayı dene bakalım.

Yok abi olmuyo. fflush fonksihoynu ne? ilk defa kullandım derleme hatası veriyo, flush(); yazdım yine aynı şekil.


Bu mesaja 1 cevap geldi.
E
11 yıl
Onbaşı
Konu Sahibi

quote:

Orijinalden alıntı: keftar

quote:

Orijinalden alıntı: emregul.1994

quote:

Orijinalden alıntı: keftar

döngünün başında k=null; diyerek içini boşaltmalısın ya da farklı bir değer vermelisin aksi takdirde hep Y olarak kalır.

Abi ne alakası var if'in içinde if var. Kaldı ki o ife girmeden önce scanf'le k'yı alıyorum zaten. Sorun başka bişey

haklısın yanlış görmüşüm, kod düzgün görünüyor sorunu bulamadım

Olur böyle vakalar



M
11 yıl
Yüzbaşı

fflush() fonksiyonu scanf kullanımında önce buffer'da kalmış verileri silmeye yardımcı olur. scanf genelde char ile yaptığı işlemlerde güvenilir olmuyor.

şöyle ilginç bir yöntem var. scanf(" %c",&k); yani % işaretinden önce bir boşluk bırak.

fflush'ın çalışmamasının nedeni de büyük ihtimalle fflush(stdin); şeklinde yazılması gerektiği için benim hatam birazcık. :D

sen boşluk bırakma yöntemini bir dene olmazsa kısmet.




Bu mesajda bahsedilenler: @emregul.1994
R
11 yıl
Er

Şimdi burada 2 durum bulunuyor.
1.si ilk scanf inde integer mı değil mi kontrolü yok. kullanıcı excellenti gördükten sonra sayı değil de harfe basmaya devam ederse sonsuza kadar excellent yazısını görecektir.
2. her bir enter bir newline character dir. her bir karakter ise scanf için bir veridir. Newline entera bastığında oluşur.

Buna göre aşağıdaki kod çalışmaktadır:

 
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int main() {

int number, a;
char k;

srand(time(0));
number = rand() % 11;

while (1) {
scanf(" %d", &a);
getchar();

if (a > number)
printf("big");
else if (a < number)
printf("low");

else if (a == number) {
printf("excellent");
scanf(" %c", &k);
a = -1;
getchar();

if (k == 'Y')
number = rand() % 11;
else if (k == 'N')
break;

}
}
getchar();
return 0;
}






< Bu mesaj bu kişi tarafından değiştirildi recipe -- 7 Ağustos 2014; 18:39:10 >


Bu mesajda bahsedilenler: @emregul.1994
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.