Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 主函数中的循环运行错误_C - Fatal编程技术网

C 主函数中的循环运行错误

C 主函数中的循环运行错误,c,C,当我运行代码时,在main函数中出现了一些错误。在main的第一轮循环之后,程序打印“错误的选择”,尽管选择是合法的 #include <stdio.h> #include <stdlib.h> int factorial(int n); void prime_numbers(){ int upper_bound; printf("Define upper bound:"); scan

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

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

#包括
#包括
整数阶乘(intn);
无效素数(){
int上界;
printf(“定义上限:”);
scanf(“%d”&上限);
printf(“质数:”);
int i,j;
int变量;

对于(i=2;i而言,这可能与您按下返回键来输入输入缓冲区中的输入有关

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

因此,您的新代码如下所示:

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

scanf(“%c”和&choice);
更改为
scanf(“%c”和&choice);
。实际上,这在使用多字节行结尾的操作系统上不起作用,如windows/DOS