c语言:关于scanf()语句与while循环的问题

 我来答
刑同书杞裳
2019-04-15 · TA获得超过3.8万个赞
知道大有可为答主
回答量:1.4万
采纳率:26%
帮助的人:760万
展开全部
在你输入y回车后,键盘的缓冲区中会存在一个y和一个'\n'(回车符)。所以第第一次你的a会读入字符y,然而第二次输入y时,缓冲区中还有一个回车符在,所以第二次读入的是第一次残留在缓冲区的回车符,而不是新输入的y。所以不满足条件,退出循环。
修改方法:
在scanf语句前加一句:fflush(stdin);这句的作用是清空缓冲区(就是所谓的流)中内容,这样你再次输入y的时候就不会读到上次剩余的回车符了。
凤树枝惠缎
2019-09-30 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:28%
帮助的人:852万
展开全部
三点:
1.
scanf从缓冲区读取:你输入的字符串会保存在一个缓冲区内,scanf在正确的时候是到这个缓冲区中读取字符,并且从缓冲区中删除字符。但如果是%d格式碰到了字母,则不会读取也不会删除,之后abc还在缓冲区内。
2.
scanf不停止:如果缓冲区内有内容,scanf是不会停下来等你输入的,因为abc一直在缓冲区内,所以造成了一直不停重复循环。
3.
scanf的返回值:scanf如果成功返回的是输入的个数,当你输入abc的时候,scanf失败,返回0,则条件一直成立,所以造成了死循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式