我想过制作一个计算器,只是一个带循环和基本操作的简单计算器,但奇怪的是我的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;
}
答案 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()
解析它们,则可能更容易提供良好的诊断。
number2
未包含您的预期。number1
和number2
初始化为-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;
}