getchar()问题
C语言初学者,编了一个做数学四则运算的计算器,输入顺序为:第一个数,回车,运算符,回车,第二个数,回车——得到运算结果。为什么输入第一个数以后需要用getchar()吞回车,输入运算符后却不需要用getchar()吞回车?没想明白,求解答。
#include<stdio.h>
int main()
{
float num1,num2,result;
char oper_ch;
printf("请输入第一个数\n————————\n");
scanf("%f",&num1);
getchar();//有getchar()吞回车
printf("请输入运算符\n————————\n");
scanf("%c",&oper_ch); //输入运算符,为什么这后面不需要加getchar吞回车?
printf("请输入第二个数\n————————\n");
scanf("%f",&num2);
if (oper_ch=='+') result=num1+num2;
if (oper_ch=='-') result=num1-num2;
if (oper_ch=='*') result=num1*num2;
if (oper_ch=='/') result=num1/num2;
printf("%f\n",result);
return 0;
} 因为char本来就只能存放一个字符,回车就溢出了。 本帖最后由 dadidada 于 2020-6-19 20:05 编辑
qiuyouzhi 发表于 2020-6-19 19:46
因为char本来就只能存放一个字符,回车就溢出了。
我已经迷糊了,同样是scanf(),为什么输入第一个数字要加getchar(),后面输入运算符也用的scanf()却不用加getchar()? 是不是因为我输入第一个数字后的回车('\n'),可以被输入运算符时的scanf("%c",&oper_ch)语句中的%c给识别掉,而输入运算符以后的回车不能被scanf("%d",&num2)语句中的%d识别掉,因为不是同一种数据类型。 实际上是因为你不 getchar 的话,得到的运算符永远是换行符。
扫描整数时会自动忽略空白符,扫描字符型时不会。
页:
[1]