2016-01-23 42 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