我C程序中出现了字符输入错误?

5

我是C编程新手,我已经用C语言编写了一个简单的计算器程序。程序可以运行但是无法正常工作,当输入变量b 的值后,如果接着输入字符,则不会再要求输入。我不知道为什么会出现这种情况,请问有没有解决方法?

以下是我的代码:

#include <stdio.h>
int main()
{
    float a,b;
    char op;
    printf("enter a: ");
    scanf("%f",&a);
    printf("enter b: ");
    scanf("%f",&b);
    printf("enter operation: ");
    scanf("%c",&op);
    switch(op)
    {
        case '+':
            printf("\n%.2f %c %.2f = %.2f",a,op,b,a+b);
            break;
        case '-':
            printf("\n%.2f %c %.2f = %.2f",a,op,b,a-b);
            break;
        case '*':
            printf("\n%.2f %c %.2f = %.2f",a,op,b,a*b);
            break;
        case '/':
            printf("\n%.2f %c %.2f = %.2f",a,op,b,a/b);
            break;
        default:
            printf("invallid input!!");
    }
    return 0;
}

这个程序看起来完全正确,但我还是感觉缺少了些什么。欢迎提供答案。

2个回答

3

在输入操作的scanf()函数的字符格式说明符之前加上一个空格,你的程序就可以正常工作:

scanf( " %c" , &op );

2

使用scanf()时,它会在输入缓冲区中留下一个\n字符。下一个scanf()将保留这个换行符并存储它。您需要在scanf()中加入一个空格:

scanf(" %c", &op); /* to skip any number of white space characters */

或者使用 getchar() 函数来读取字符。函数 getchar() 返回一个 int 类型的值,当出错时返回 EOF。可以这样使用:

int op = getchar()

这里存储了op中找到的字符。你也可以在scanf()调用后添加getchar(),以消耗剩余的\n字符。

注意:检查scanf()的结果是个好习惯。你应该写成:

if (scanf(" %c", &op) != 1) {
    /* oops, non character found. Handle error */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接