关于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;
}
展开
 我来答
百度网友c7e1877
2016-05-11 · TA获得超过4670个赞
知道大有可为答主
回答量:4996
采纳率:81%
帮助的人:1440万
展开全部
第一个 getchar() 不会等待你输入 y+回车的,因为前面有个 scanf,scanf 不会删掉输入缓冲区里的回车,所以第一个 getchar() 会直接运行过去,等待你输入的就是第二个 getchar()。你用 VC 在两个 getchar 上都打断点调试一下就明白了。

不要用 getchar, scanf 这些直接操作标准输入缓冲区的函数,目前最好的方法是用 fgets 读入一行(可以是文件流也可以是标准输入即控制台键盘输入),再用 sscanf 读取和解析整数、浮点数这些数据类型,这样能保证输入格式错误时(比如要求数字却输入了非数字),错误的输入不会一直老留在输入缓冲区中,导致循环解析错误。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式