2014-07-11 27 views
-2

該代碼執行自身時不會在轉換語句scanf("%c",&choose); switch(choose)之前詢問字符「選擇」以作進一步處理。不要求字符「選擇」在轉換語句之前

printf("enter option 1,2,3 or 4 \n\n"); 
scanf("%c",&choose); // why it not ask to input char 
switch(choose) 
{ 
    case '1': case '+': 
    { 
     printf("enter 1st value\n"); 
     scanf("%f",&a); 
     printf("enter 2st value\n"); 
     scanf("%f",&b); 
     c=a+b; 
     printf("%f + %f = %f",a,b,c); 
     break; 
    } 
    case '2': case '-': 
    { 
     printf("enter 1st value\n"); 
     scanf("%f",&a); 
     printf("enter 2nd value\n"); 
     scanf("%f",&b); 
     c=a-b; 
     printf("%f - %f = %f",a,b,c); 
     break; 
    } 
    case '3': case'*': 
    { 
     printf("enter 1st value\n"); 
     scanf("%f",&a); 
     printf("enter 2nd value\n"); 
     scanf("%f",&b); 
     c=a*b; 
     printf("%f * %f = %f",a,b,c); 
     break; 
    } 
} 
+0

1.您是否在任何地方聲明瞭「選擇」? 2.你爲什麼不問 - 你的意思是那裏沒有文字? –

+0

在這個printf/scanf之前還有別的東西嗎?例如... [另一個scanf](http://stackoverflow.com/questions/4023643/second-scanf-is-not-working)? –

+0

我聲明char選擇,但它不是與開關一起工作,如果更改變量char到int選擇;那麼它將工作,但它將不再能夠存儲諸如+ - * – user3828413

回答

0
printf("enter option 1,2,3 or 4 \n\n"); 
scanf("%c",&choose); 

在您的代碼中,如果您在上述給定的代碼之前使用任何scanf,則預期會出現此行爲,因爲之前的scanf會讀取輸入緩衝區中的\n,而輸入緩衝區中會輸入\n作爲輸入到下一個scanf的輸入。

爲了克服這個問題,請scanf(...)之前使用fflush(stream),這應該解決的問題。您可以使用getchar()函數,這將解決您的問題。

0

可能是因爲你已經輸入的東西比較早,所以有留在緩衝區,這種「貪婪」 scanf()然後掃描不停止非掃描的字符。

您應該檢查的scanf()返回值來學習,如果它成功與否。

你應該切換到使用fgets()在一整行讀取,然後解析。這樣做更安全,更容易預測。

0

我執行它沒有任何問題(它獲取的「選擇」字符):

#include <stdio.h> 
int main(int argc, char *argv) { 
     char choose; 
     float a,b,c; 
     printf("enter option 1,2,3 or 4 \n\n"); 
     scanf("%c",&choose); // why it not ask to input char 
      switch(choose) 
     { 
      case '1': case '+': 
       { 
          printf("enter 1st value\n"); 
          scanf("%f",&a); 
          printf("enter 2st value\n"); 
          scanf("%f",&b); 
          c=a+b; 
          printf("%f + %f = %f",a,b,c); 
          break; 
       } 
      case '2': case '-': 
       { 
          printf("enter 1st value\n"); 
          scanf("%f",&a); 
          printf("enter 2nd value\n"); 
          scanf("%f",&b); 
          c=a-b; 
          printf("%f - %f = %f",a,b,c); 
          break; 
       } 
      case '3': case'*': 
       { 
          printf("enter 1st value\n"); 
          scanf("%f",&a); 
          printf("enter 2nd value\n"); 
          scanf("%f",&b); 
          c=a*b; 
          printf("%f * %f = %f",a,b,c); 
          break; 
       } 
     } 
     return 0; 
} 

也許它的東西,你以前不讀...

我猜你正在做一個類似的「scanf(」%c「,&選擇);」之前,所以下一次閱讀你會得到回車。

你可以嘗試更改以下行:

scanf("%c",&choose); 

爲:

scanf("%c%*c",&choose); 

...所以你放棄\ n

如果不解決您的問題,也許你應該提供更多的代碼:)

+0

'scanf(「%c%* c」,&選擇);'無效果。 C」,&選擇);' – BLUEPIXY