Bu kodun main metodunda for döngüsünün 2. dönüşünde problem çıkıyor ve "Enter your choice" cümlesini 2 defa basıyor.Sebebi ne olabilir acaba? alt text

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

    int factorial(int n);
     void prime_numbers(){

        int upper_bound;
        printf("Define upper bound:");
        scanf("%d",&upper_bound);
        printf("Prime Numbers: ");

        int i,j;
        int variable;
         for (i=2;i<=upper_bound;i++)
            {
              variable = 1;
                for (j = 2; j <i; j++)
                   { if (i % j == 0)
                        {
                            variable = 0;
                            break;
                        }
                   }
                     if (variable == 1)
                        printf ("%d ", i );
            }
    }

     void leibniz_series(){

        printf("Define k value:");
        int k;
        scanf("%d",&k);
        double sum=0;

        int i;
         for (i=1; i<k; i++)
        {
                if ((i%2)==1)
                    sum=sum+1.0/((2.0 * (double)i) - 1.0);
               else
                sum = sum - 1.0/((2.0 * (double)i) - 1.0);
            }

        printf("Result:%f\\n",4*sum);
    }

     void combination(){

        int comb;
        printf("Define n and r:");
        int n,r;
        scanf("%d %d",&n,&r);
        comb=factorial(n)/(factorial(r)*factorial(n-r));
        printf("Result:%d",comb);

    }

    int factorial(int n){
        int f=1;
        int i;
        for(i=1;i<=n;i++)
        f=f*i;
        return f;
    }

    int main()
    {
        printf("Press P or p for Prime Numbers\\n");
        printf("Press L or l for Leibniz Series\\n");
        printf("Press C or c for Combinations\\n");
        printf("Press E or e for Exit\\n");

       for(;;){
        char choice;
        printf("Enter your choice:");
        scanf("%c",&choice);

        if(choice=='E' || choice=='e')
            exit(0);

        switch(choice){
            case 'p' :  prime_numbers();
                            break;
            case 'P' :  prime_numbers();
                            break;
            case 'l' :  leibniz_series();
                            break;
            case 'L' :  leibniz_series();
                            break;
            case 'c' :  combination();
                            break;
            case 'C' :  combination();
                            break;
           // default  :   printf("Wrong choice\\n");

        }

    }
        return 0;
    }

soruldu: 30 Mar '15, 14:00

anilemreozcelik's gravatar image

anilemreozcelik
1406812
cevap kabul oranı: 0%

çözümü debug ;)

(30 Mar '15, 17:08) Erdemym Erdemym's gravatar image

char choice; satırını döngünün hemen üstüne çıkarırmısın

(31 Mar '15, 18:04) kodmanyagha kodmanyagha's gravatar image

scanf("%c",&choice);

dan sonra sunu

getchar();

ya da sunu

fflush(stdin);

koyarak deneyebilir misin?

permanent link

cevaplandı: 02 Nis '15, 05:14

tafali's gravatar image

tafali
4593412
cevap kabul oranı: 12%

İkisini de denedim ama malesef çözülmedi sorun.

permanent link

cevaplandı: 05 Nis '15, 13:18

anilemreozcelik's gravatar image

anilemreozcelik
1406812
cevap kabul oranı: 0%

scanf("%c",&choice);

den hemen sonra

printf("..... %d ", choice);

eklersen, pespese geliyor dedigin "Enter your choice" larin arasinda, aslinda donguye ikinci kere girilip, sen tusa basmadan bir tusun alindigini "switch" icinde uygun case bulunamadigindan tekra basa donulup "Enter your choice" yazildigini gorursun. ve bu arada bizim goremedigimiz tusun kodunun "10" oldugunu da

yani pespese "Enter your choice" geliyor dedigin yerde su olur "Enter your choice ....10 Enter your choice"

10 da "new line" in kodu.

aslinda olan sey su, sen p yazip entera basinda, scanf p yi okuyor ama orada bir karakter kaliyor, for a ikinci giridinde senin bir tusa basmana firsat kalmadan, p den sonra kalan gorunmeyen karakteri alip tekrar switch e giriyor.

ben scanf("%c",&choice); den sonra getchar(); ekledim, problem olmadi. cozulmus gorunuyordu. yani su sekilde.

    //....
    printf("Enter your choice:");
    scanf("%c",&choice);
    getchar();
    if(choice=='E' || choice=='e')
    //....

ben aradaki fonksiyon cagrilarini kaldirmistim, belki oradan da kalan olabilir. istersen getchar() i onceye de koyup bir dene. su sekilde.

    //....
    getchar();
    printf("Enter your choice:");
    scanf("%c",&choice);
    getchar();
    if(choice=='E' || choice=='e')
    //....
permanent link

cevaplandı: 06 Nis '15, 04:09

tafali's gravatar image

tafali
4593412
cevap kabul oranı: 12%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×42

Soruldu: 30 Mar '15, 14:00

Görüntüleme: 545 kez

Son güncelleme: 06 Nis '15, 04:09

powered by BitNami OSQA