摘自论坛

本文探讨了C语言中scanf函数未处理的换行符问题,通过while循环结合getchar清空输入缓冲区的方法,解决了scanf遗留的 字符导致程序逻辑混乱的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

管理菜单
结  帖
发  帖
回  复

while(getchar()!'\n')的不解[问题点数:20分,结帖人:ylj103037496]

楼主发表于:2009-01-23 13:56:40
先看一段程序:
scanf("%f",&library[count++].value);
while(getchar()!='\n')
continue;//清空输入行

因为scanf()没有对'\n'做处理,例如我们做出请求时:
12.50[enter]
这个语句传送了下面的字符序列:
12.50\n
scanf读入了“1”、“2”、“.” 、“5”、“0”,但把\n留在了输入流中,等待下个读入语句处理。
是不是用了while(getchar()!='\n')就可以把那个\n从输入流中读出来,因为我们没有用ch=getchar()之类的语句来保存那个字符,
就等于把那个字符丢掉了。


但我是还是很不理解,怎么说呢,通常我们执行到getchar()这语句时,才会提示我们输入,不是吗?所以getchar()读取的字符应该是这时
时输入的,它怎么会去取之前的scanf输入留下的的字符呢?
 
 
#1楼 得分:20回复于:2009-01-23 14:09:20
因为有缓冲

scanf 输入12.50\n,直到最后的\n才结束输入操作,这些内容全部被保存在缓冲内,并在后续的getchar中依次读取并操作..
 
  • waizqfor用户头像
  • waizqfor
  • (愛(开始忙了~~~~消失))
  • 等 级:
#2楼 得分:0回复于:2009-01-23 14:15:02
你输入的12.50\n这些内容一直保存的缓冲区 你没有清除 你可以用fflush清除 然后再重新getchar输入
 
#3楼 得分:0回复于:2009-01-23 14:35:14
谢谢两位。我的理解看来没大错。谢谢
 
#4楼 得分:0回复于:2009-01-23 14:50:53
ls说的对。
因为你没哟刷新缓冲区,所以回车被getchar接受到
 
管理菜单结  帖发  帖回  复
相关问题
  
京 ICP 证 070598 号
北京创新乐知信息技术有限公司 版权所有
 联系邮箱:webmaster@youkuaiyun.com
Copyright © 1999-2012, youkuaiyun.com, All Rights Reserved  GongshangLogo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值