我使用getchar()时,Switch语句无法正常工作?

时间:2016-01-23 23:37:29

标签: c

我需要编写一个程序,通过for循环4次,并获取用户输入。它可以是+-*/。否则会打印出invalid operator。当我运行这个程序并输入+时,它会输出f = 30(我想要的)但是它会在它下面输出无效的操作符,而我甚至不会输入另一个字符。然后我输入-并输出invalid operator两次。有人可以解释为什么会这样吗?

#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 个答案:

答案 0 :(得分:3)

这里的问题是,当您输入操作员时,输入操作员 Enter 键,然后 Enter 键添加输入缓冲区中的换行符,您将读取但不能处理。

答案 1 :(得分:-1)

fflush(stdin);

当您收到来自ch=getchar()的输入时,您输入一个字符并按Enter键,也会在输入缓冲区中添加换行符。

尝试使用fflush(stdin)while(getchar()!='\n');