2016-01-22 124 views
-3

爲什麼代碼直接在偶數時間獲取空數據?我不知道發生了什麼事。 非常感謝。for循環和getchar()在C

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

    void main() { 

     int f, a = 10, b = 20; 
     for (int i = 0; i < 5; i++) 
     { 
      char ch; 
      ch = getchar(); 
      printf("ch = %c\n", ch); 
      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"); 
      } 

     } 

    } 

enter image description here

如果我輸入一個運營商,它循環兩次。第二次是空的輸入。

+1

請詳細說明什麼不工作,以及預期的結果是什麼 –

+0

每次輸入任何操作員時,都會顯示以下信息。 「ch = invalid operator」 –

+0

其他注意事項:1)使用'int main(void)'2)'ch'應該是一個'int'。 –

回答

2

比方說,您輸入a後跟輸入

getchar()的第一個呼叫返回a,但換行符仍留在輸入流中。下一次撥打getchar()將返回換行符而不用等待輸入。

有很多方法可以解決這個問題。最簡單的方法之一是在getchar()的電話後忽略該行的其餘部分。

ch = getchar(); 

// Ignore the rest of the line. 
int ignoreChar; 
while ((ignoreChar = getchar()) != '\n' && ignoreChar != EOF); 
0

如果你不想改變很多在你的代碼,我建議剛插入另一getchar在for循環消費「\ n」結尾:

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

void main() { 

    int f, a = 10, b = 20; 
    for (int i = 0; i < 5; i++) 
    { 
     char ch; 
     ch = getchar(); 
     printf("ch = %c\n", ch); 
     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"); 
     } 
     getchar(); 

    } 

}