2015-04-05 113 views
-1

当我运行代码时,主函数出错了。在主循环第一轮后,程序显示“Wrong Choice”错误选择是合法的。循环运行错误主要功能

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

'的scanf( “%C”,与选择);'改变'的scanf( “%C”,与选择);'。 – BLUEPIXY 2015-04-05 17:43:55

回答

0

这可能是与你按下输入框输入输入缓冲区躺在附近的返回键

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

所以,你的新代码将是这个样子:

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

实际上,这对于使用多字节行尾的操作系统无效,例如windows/DOS – user3629249 2015-04-06 22:20:23