2016-01-23 156 views
1

我需要編寫一個程序,經過for循環4次,並獲得用戶輸入。它可以是+,-,*/。否則,它將打印出invalid operator。當我運行這個程序,並把它放在+,它輸出f = 30(我想要的),但它後面輸出無效的操作權,甚至沒有我插入另一個字符。然後輸入-,輸出invalid operator兩次。有人可以解釋爲什麼會這樣嗎?當我使用getchar()時,switch語句不能正常工作?

#include <stdio.h> 
#pragma warning(disable : 4996) 

void main() { 
    char ch; 
    int f, a = 10, b = 20; 
    for (int i = 0; i < 4; i++) { 
     ch = getchar(); 
     switch (ch) { 
     case '+': f = a + b; printf("f = %d\n", f); 
      break; 
     case '−': f = a - b; printf("f = %d\n", f); 
      break; 
     case '*': f = a * b; printf("f = %d\n", f); 
      break; 
     case '/': f = a/b; printf("f = %d\n", f); 
      break; 
     default: printf("invalid operator\n"); 
      break; 
     } 
    } 
} 
+2

首先你可能要檢查什麼['getchar'(http://en.cppreference.com/w/c/io/getchar)* *實際收益爲類型。 *和*處理可能的錯誤。 –

回答

3

這裏的問題是,當你進入操作,輸入操作員輸入關鍵,而輸入鍵增加輸入緩衝區換行,你會讀,但不處理。

-1
fflush(stdin); 

當您從ch=getchar()收到輸入,你輸入一個字符,然後按回車,換行字符輸入緩衝區增加了。

嘗試使用fflush(stdin)while(getchar()!='\n');

+2

'fflush(stdin)'有未定義的行爲。不要這樣做。永遠。 – molbdnilo

+0

如果fflush(stdin)有未定義的行爲,那麼你可以再使用一個getchar()來收集新行'\ n',即'ch = getchar(); getchar()'。 – Nutan