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

问题描述 投票:0回答:3

我是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;
}

该程序似乎是绝对正确的,但仍然有一些我缺少的东西。非常感谢您的回答。

c input char
3个回答
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
中找到的字符。您也可以在
getchar()
调用后添加
scanf()
,这将消耗剩余的
\n
字符。

注意: 检查

scanf()
的结果是一个很好的做法。你应该写:

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.