Şimdi Ara

C sorusu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
9
Cevap
0
Favori
545
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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;


    }







  • 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.
  • 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
  • printf("excellent");


    satırından sonra

    fflush();


    yapmayı dene bakalım.
  • 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
  • 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.
  • 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




  • Yapay Zeka’dan İlgili Konular
    C# OLASILIK
    5 yıl önce açıldı
    C++ Basit Bir Soru
    12 yıl önce açıldı
    c++ örnekleri
    19 yıl önce açıldı
    Daha Fazla Göster
  • emregul.1994 E kullanıcısına yanıt
    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.
  • emregul.1994 E kullanıcısına yanıt
    Ş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 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.