2016-01-22 199 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(); 

    } 

}