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

Posted

技术标签:

【中文标题】我的 C 程序中的字符输入错误?【英文标题】:character input error in my C program? 【发布时间】:2017-07-02 19:28:19 【问题描述】:

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

该程序似乎完全正确,但我仍然缺少一些东西。答案表示赞赏。

【问题讨论】:

【参考方案1】:

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

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

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

int op = getchar()

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

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

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

【讨论】:

【参考方案2】:

只需在输入操作的scanf() 函数的字符格式说明符之前放置一个空格,您的程序就可以正常工作了:

scanf( " %c" , &op );

【讨论】:

以上是关于我的 C 程序中的字符输入错误?的主要内容,如果未能解决你的问题,请参考以下文章

c-string用户输入为空时如何发送错误消息?

只有某些输入的 C 中的分段错误

如果在 C 中使用 scanf 输入字符,如何获取打印错误

简单的 C 程序。从函数返回的字符串导致错误

C语言编程,求大神解释错误在哪?程序要求是:输入一个数,再输出比这个数大的第四个素数。附我的代码!

我的辅音/元音替换有啥错误?