我的C程序中的字符输入错误?

时间:2017-02-14 13:23:39

标签: c input char

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

答案 0 :(得分:3)

只需在输入操作-v函数的字符格式说明符之前添加空格,您的程序就能正常工作:< / p>

scanf()

答案 1 :(得分:2)

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

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

或者使用getchar()代替字符。函数getchar()在出错时返回intEOF它可以这样使用:

int op = getchar()

其中存储了op中找到的字符。您也可以在getchar()来电之后添加scanf(),这将消耗剩余的\n字符。

注意:最好检查scanf()的结果。你应该写:

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