scanf整数变量之间的scanf char变量不起作用?

时间:2013-11-23 16:37:10

标签: c char int scanf

我想过制作一个计算器,只是一个带循环和基本操作的简单计算器,但奇怪的是我的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;
}

3 个答案:

答案 0 :(得分:2)

您应该测试每次都从scanf()获得一个值。

%c个字符在第一个数字后读取空白或换行符;在阅读角色之前,使用带有前导空格的" %c"跳过可选空白区域。

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

如果您使用fgets()读取整行并使用sscanf()解析它们,则可能更容易提供良好的诊断。

  • 建议1:显示您输入的内容和输出内容的示例。这使人们更容易帮助您(他们可以判断程序是否为他们生成相同的输出)。
  • 建议2:回显你的输入,这样你就可以看到程序得到了什么。这允许您判断程序是否获得了您期望的输入。例如,您可能会发现number2未包含您的预期。
  • 建议3:将number1number2初始化为-1,以便了解scanf()何时失败(因为您尚未检查scanf()成功)。

答案 1 :(得分:1)

问题在于char遗留下来的换行符\n scanf。通过在格式说明符%c之前放置一个空格可以避免这种情况。

试试这个

scanf(" %c", &a);  
       ^ An space  

这将有助于您在第一次\n

之后吃掉剩余的scanf字符

答案 2 :(得分:0)

int main()

{

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

scanf("%d",&number1);

fflush(stdin); // SIMPLE WAY FLUSH THE INPUT STREAM, INPUT BUFFER IS USUALLY CLEARED.
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;

}