A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenzuliang1993 中级黑马   /  2015-4-11 22:55  /  1631 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如图,这个应该循环一次让用户判断一次啊,可是为什么运行的时候输入Y的时候会连续循环两遍才再次让用户判断啊

QQ20150411-2.png (141.45 KB, 下载次数: 19)

QQ20150411-2.png

评分

参与人数 1技术分 +1 收起 理由
Micro + 1 很给力!

查看全部评分

5 个回复

倒序浏览
因为你在scanf的时候只读取了一个字符 ,后面的字符还留着缓冲区里
比如你输入了y 敲了回车,这时候程序读取了y,但是把回车还留着缓冲区里,等到你的下一个循环时,scanf直接将回车读取了,所以又打印了一次
解决办法就是每次scanf以后清除一次缓冲区
在scanf后面加上一行
while(getchar()!='\n')continue;
就行了

评分

参与人数 1技术分 +1 收起 理由
Micro + 1 赞一个!

查看全部评分

回复 使用道具 举报
wslinke 发表于 2015-4-11 23:13
因为你在scanf的时候只读取了一个字符 ,后面的字符还留着缓冲区里
比如你输入了y 敲了回车,这时候程序读取 ...

分析的很好,我想的也是缓存区里有残留
回复 使用道具 举报
缓存区中有残留
回复 使用道具 举报
junjunzhang 来自手机 中级黑马 2015-12-7 00:05:22
报纸
二楼高见,只需把那个多余字符吸收即可
回复 使用道具 举报
学习下~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马