关于C语言getchar函数的逻辑问题
#include<stdio.h>intmain(){floatfDues;floatfAmount;intiOntime;charcChar;printf("Enter...
#include<stdio.h>
int main()
{
float fDues;
float fAmount;
int iOntime;
char cChar;
printf("Enter dues amount:\n");
scanf("%f",&fDues);
printf("On Time? (y/n)\n");
getchar(); //假如这里驶入一个y+回车,y应该被读取了
cChar=getchar(); //这里应该被赋值一个回车字符,但是运行结果为什么是y呢
iOntime=(cChar=='y')?1:0;
fAmount=iOntime?fDues:(fDues*1.1);
printf("the Amount is:%.2f\n",fAmount);
return 0;
} 展开
int main()
{
float fDues;
float fAmount;
int iOntime;
char cChar;
printf("Enter dues amount:\n");
scanf("%f",&fDues);
printf("On Time? (y/n)\n");
getchar(); //假如这里驶入一个y+回车,y应该被读取了
cChar=getchar(); //这里应该被赋值一个回车字符,但是运行结果为什么是y呢
iOntime=(cChar=='y')?1:0;
fAmount=iOntime?fDues:(fDues*1.1);
printf("the Amount is:%.2f\n",fAmount);
return 0;
} 展开
1个回答
展开全部
第一个 getchar() 不会等待你输入 y+回车的,因为前面有个 scanf,scanf 不会删掉输入缓冲区里的回车,所以第一个 getchar() 会直接运行过去,等待你输入的就是第二个 getchar()。你用 VC 在两个 getchar 上都打断点调试一下就明白了。
不要用 getchar, scanf 这些直接操作标准输入缓冲区的函数,目前最好的方法是用 fgets 读入一行(可以是文件流也可以是标准输入即控制台键盘输入),再用 sscanf 读取和解析整数、浮点数这些数据类型,这样能保证输入格式错误时(比如要求数字却输入了非数字),错误的输入不会一直老留在输入缓冲区中,导致循环解析错误。
不要用 getchar, scanf 这些直接操作标准输入缓冲区的函数,目前最好的方法是用 fgets 读入一行(可以是文件流也可以是标准输入即控制台键盘输入),再用 sscanf 读取和解析整数、浮点数这些数据类型,这样能保证输入格式错误时(比如要求数字却输入了非数字),错误的输入不会一直老留在输入缓冲区中,导致循环解析错误。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询