2015-04-05 148 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