【问题标题】:character input error in my C program?我的 C 程序中的字符输入错误?
【发布时间】: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;
}

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

【问题讨论】:

    标签: c input char


    【解决方案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 );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多