循环运行错误的主要功能

时间:2015-04-05 17:26:38

标签: c

当我运行代码时,在main函数中出现问题。在main的第一轮循环之后,程序打印"错误的选择"虽然选择是合法的。

enter image description here

    #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 );
            }

            printf("\n");
    }

     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);
        printf("\n");

    }

    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");

        char choice;

        for(;;){

        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;
    }

1 个答案:

答案 0 :(得分:0)

这可能与您按下返回键以输入输入缓冲区中的输入有关。

要从缓冲区中清除该字符,您可以阅读它并在扫描scanf("%*c");中的字符后立即添加STDIN来忽略它。

所以你的新代码看起来像这样:

printf("Enter your choice:");
scanf("%c",&choice);
scanf("%*c");