c - 主函数中循环运行错误

标签 c

当我运行代码时,在主函数中出现了问题。在主函数中的第一轮循环之后,程序打印“错误选择”,尽管选择是合法的。

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

最佳答案

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

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

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

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

关于c - 主函数中循环运行错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29460096/

相关文章:

c++ - 伙伴分配算法 - 堆扩展

c - libuv fs 读取文件再打印一次

c - 可以检查函数的返回类型吗?

c++ - 是否可以将线程执行转移到另一个线程?

c - 序列化 64 位宽度整数

c - 声明结构数组时出错

c - 我的 BSS 部分的大小是否达到临界值?

c++ - 如何解析 HTTP POST(文件上传)流?

c++ - 在声明和初始化指针后,什么时候给变量字面量加上星号前缀,什么时候不用?

c - 内存被破坏