This question already has answers here:
Closed 2 years ago.
Scanf skips every other while loop in C
(10个答案)
我想做一个计算器,只是一个简单的带有循环和基本操作的计算器,但奇怪的是,我的
如果用
建议1:举一个例子,说明你输入的是什么,输出的是什么。这使人们更容易帮助您(他们可以判断程序是否为他们生成相同的输出)。
建议2:回显您的输入,这样您就可以看到程序得到了什么。这允许您判断程序是否获得了预期的输入。例如,您可能会发现
建议3:将
(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:将
number2
和number1
初始化为number2
以便可以看到-1
何时失败(因为您还没有检查scanf()
是否成功)。关于c - 在scanf整数变量之间的scanf char变量不起作用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20164885/