scanf整数变量之间的scanf char变量不';不行?
我想做一个计算器,只是一个简单的带循环和基本运算的计算器,但奇怪的是,在我的数字scanf整数变量之间的scanf char变量不';不行?,c,char,int,scanf,C,Char,Int,Scanf,我想做一个计算器,只是一个简单的带循环和基本运算的计算器,但奇怪的是,在我的数字scanf之间的scanf字符被忽略了。如果我把它放在整数的scanf上,它就可以工作了,但它看起来不像计算器。有没有办法解决这个问题?它还没有完成;这里有个错误,所以想知道出了什么问题 #include <stdio.h> #include <stdlib.h> int main(){ int number1,number2,total; char a; print
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;
}
#包括
#包括
int main(){
整数1,整数2,总计;
字符a;
printf(“这是您的个人计算器:(以“=”结尾)\n”);
scanf(“%d”和编号1);
scanf(“%c”和“&a”);
scanf(“%d”和编号2);
如果(a='x'| | a='x'| | a=='*')){
总数=1号*2号;
printf(“%d”,总计);
}else如果(a=='/')){
总数=1号/2号;
printf(“%d”,总计);
}else如果(a=='+')){
总数=1号+2号;
printf(“%d”,总计);
}else如果(a='-'){
总数=数字1-2;
printf(“%d”,总计);
}否则{
printf(“错误”);
}
系统(“暂停”);
返回0;
}
问题是因为scanf
留下的换行字符\n
。这可以通过在格式说明符%c
之前放置空格来避免
试试这个
scanf(" %c", &a);
^ An space
这将帮助您吃光第一次scanf
留下的\n
字符。您应该测试每次都从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:将
number1
和number2
初始化为-1
,以便查看scanf()
失败的时间(因为您尚未检查scanf()
是否成功)
}您好,谢谢。它解决了问题。。直到现在我才知道。谢谢你的欢迎。我很高兴它帮助了你:)你必须展示你是如何输入数字的。我相信,如果您在一行中输入所有内容而不带空格,例如12+34
,您的计算器将运行良好。但是,如果你在单独的一行中输入所有内容,那就不同了。您必须在问题中包含如此重要的细节。您还不清楚为什么要告诉用户“结束于”。用户应在何处、何时以及如何输入“=”?将fflush
应用于stdin
是非法的<代码>fflush
仅适用于输出流。因此,这不仅不是一种“简单的刷新方式”,实际上是一个重大错误。@AndreyT:请注意,在某些系统上,定义了fflush(stdin)
,特别是在Windows和Linux上(请参阅),在其他一些基于Unix的系统上也是如此。它不是根据C标准或POSIX定义的行为,但系统确实定义了它。
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;