Şimdi Ara

Sonsuz Döngü-Yardım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
0
Favori
515
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • C ile yazdığım do-while döngüsü rakam ya da sayı girildiğinde sorunsuz çalışıyor ancak kullanıcı kaza ile harf girmesi durumunda sonsuz döngü oluşuyor sebebini bulamadım. Yardım ederseniz sevinirim.



  • Kodu paylaşırsanız yardımcı olabilirim.
  • #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>

    unsigned soru(void);
    int cev(unsigned);

    int main()
    {
    int i;

    do{
    i=cev(soru());
    }while(i!=0);

    getch();
    return 0;
    }

    unsigned soru(unsigned x, unsigned y)
    {
    unsigned i, j;
    srand(time(NULL));

    i=rand()%10;
    j=rand()%10;

    printf("%u*%u kactir\n", i, j);
    return i*j;
    }

    int cev(unsigned ans)
    {
    unsigned cevap, i;
    srand(time(NULL));

    do{
    i=rand()%4;
    scanf("%u", &cevap);

    if(i==0){
    if(cevap==ans){
    printf("Mukemmel\n");}
    else if(cevap!=ans){
    printf("Yanlis. Lutfen bir daha deneyin\n");}
    else
    break;}
    else if(i==1){
    if(cevap==ans){
    printf("Cok Guzel\n");}
    else if(cevap!=ans){
    printf("Tekrar deneyin\n");}
    else
    break;}
    else if(i==2){
    if(cevap==ans){
    printf("Aferin\n");}
    else if(cevap!=ans){
    printf("Pes Etmeyin\n");}
    else
    break;}
    else if(i==3){
    if(cevap==ans){
    printf("Boyle devam et\n");}
    else if(cevap!=ans){
    printf("Hayir. Deneme devam edin\n");}
    else
    break;}
    }while(cevap!=ans);

    printf("Cikmak icin h giriniz\n");
    i=getchar();

    if(getchar()=='h'||getchar()=='H')
    return 0;
    else
    return 1;
    }



    < Bu mesaj bu kişi tarafından değiştirildi kmlmndc -- 5 Mayıs 2013; 20:51:32 >




  • Biraz karışık duruyor, deitel in kitabında bulunan 5. bolum 33 nolu alıştırma.
  • Direkt soruyu cevaplayayım. Kod karışık biraz, derleyemedim de ben hata verdi.

    //Soru
    i=rand%10;
    k=rand%10;
    cevap = i*k;
    dogru = rand%4
    yanlis = rand%4

    %d x %d = ?
    yanit -> scanf

    if(yanit==cevap)
    if(dogru==1)
    //1.ifade
    if(dogru ==2)
    // 2. ifade
    else // yanit!=cevap
    if(yanlis==1)
    //1. ifade

    şeklinde basitçe düzenleyebilirsiniz. İlla nerede hata olduğunu merak ediyorsanız buluruz elbette. Fakat sade kod yazmak daha iyidir, karışık kodlarda olur böyle şeyler.
  • Aslında sormak istediğim şey şu sayı bekleyen bir döngüde harf ya da karakter girilince sonsuz döngüye girmesinin nedeni nedir?Örneğin aşağıdaki kod nispeten daha sade gibi onda da aynı şey oluyor. Rakam ya da sayılar ile ilgili sorun yok ama harf ve ya karakter girilince sonsuz döngü oluşuyor


    #include<stdio.h>

    int main()
    {
    long int i=0, toplam=0, sayac=0;

    while(i!=9999){
    printf("bir sayi giriniz");
    scanf("%d",&i);
    toplam+=i;
    sayac++;}

    printf("girdiginiz sayilarin toplami %d dir",(toplam-9999)/(sayac-1));

    getch();
    return 0;
    }
  • scanf te her değişken türü için bir belirteç var. %d int, %c char, %s char* ... gibi. Bunlar değişken türüne göre tam olarak uyuşmalı. Uyuşmaması çalışma zamanında hataya yol açar.

    Eğer girişi kontrol etmek istiyorsan %s ile string türünde alıp sonra istediğin türe çevirebilirsin. Misal tamsayı almak istiyorsun ama giriş hatasına karşın koruma olsun istedin.

    char str[20];
    scanf("%s", str);

    int len = strlen(str);
    if(len > 9) printf("En fazla 9 haneli sayı girin\n");

    for(int i = 0; i < len; ++i)
    if(!isdigit(str) printf("Sadece rakam girin\n");

    // Giriş sorunsuz ise
    int sayi = atoi(str);

    Unutmadan gerekli bağlantıları da vereyim lazım olur. scanf için referans.
    http://www.cplusplus.com/reference/cstdio/scanf/

    String dönüşüm fonksiyonları vs.
    http://www.cplusplus.com/reference/cstdlib/

    Karakter kontrol fonksiyonları.
    http://www.cplusplus.com/reference/cctype/



    < Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 5 Mayıs 2013; 22:21:06 >




  • Yapay Zeka’dan İlgili Konular
    tez için yardım
    9 ay önce açıldı
    Daha Fazla Göster
  • İlginiz için çok teşekkür ederim, sorunun sebebini anlamak iyi oldu. Sağolun.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.