This question already has answers here:
Closed 2 years ago.
Scanf skips every other while loop in C
(10个答案)
我想做一个计算器,只是一个简单的带有循环和基本操作的计算器,但奇怪的是,我的scanf之间的scanf字符被忽略了。如果我把它放在整数的scanf上面,它会工作得很好,但它看起来不像计算器。有办法解决这个问题吗?它还没有完成;这里有个错误,所以想知道怎么了。
#include <stdio.h>
#include <stdlib.h>

int main(){
    int number1,number2,total;
    char a;
    printf("This is your personal calculator:(End with ""="")\n");

    scanf("%d",&number1);
    scanf("%c",&a);
    scanf("%d",&number2);

    if (a == 'x' || a == 'X' || a == '*'){
        total=number1*number2;
        printf("%d",total);
    } else if (a == '/'){
        total=number1/number2;
        printf("%d",total);
    } else if (a == '+'){
        total=number1+number2;
        printf("%d",total);
    } else if (a == '-'){
        total=number1-number2;
        printf("%d",total);
    } else {
        printf("error");
    }

    system("pause");
    return 0;
}

最佳答案

每次都应该测试从scanf()获取值。
%c字符读取第一个数之后的空白或换行符;在读取字符之前,使用一个前导空间跳过可选的空白。

if (scanf("%d", &number1) == 1 &&
    scanf(" %c", &a) == 1 &&
    scanf("%d", &number2) == 1)
{
    ...process possibly valid input...
}
else
{
    ...diagnostics...
}

如果用" %c"读取整行并用fgets()解析它们,可能会更容易给出好的诊断。
建议1:举一个例子,说明你输入的是什么,输出的是什么。这使人们更容易帮助您(他们可以判断程序是否为他们生成相同的输出)。
建议2:回显您的输入,这样您就可以看到程序得到了什么。这允许您判断程序是否获得了预期的输入。例如,您可能会发现sscanf()没有包含您所期望的内容。
建议3:将number2number1初始化为number2以便可以看到-1何时失败(因为您还没有检查scanf()是否成功)。

关于c - 在scanf整数变量之间的scanf char变量不起作用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20164885/

10-09 08:36
查看更多