摘自论坛

来源:互联网 发布:手机淘宝信用卡支付 编辑:程序博客网 时间:2024/04/28 06:19

CSDN-CSDN社区-C/C++-C语言

管理菜单
结  帖
发  帖
回  复

收藏

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

  • ylj103037496
  • (YLJ)
  • 等 级:
  • 结帖率:
楼主发表于: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输入留下的的字符呢?
  
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
回复次数:4
  • jixingzhong用户头像
  • jixingzhong
  • (瞌睡虫·星辰)
  • 等 级:
  • 2

    17

    2

    更多勋章
#1楼 得分:20回复于:2009-01-23 14:09:20
因为有缓冲

scanf 输入12.50\n,直到最后的\n才结束输入操作,这些内容全部被保存在缓冲内,并在后续的getchar中依次读取并操作..
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:常用代码共享
  • waizqfor用户头像
  • waizqfor
  • (愛(开始忙了~~~~消失))
  • 等 级:
#2楼 得分:0回复于:2009-01-23 14:15:02
你输入的12.50\n这些内容一直保存的缓冲区 你没有清除 你可以用fflush清除 然后再重新getchar输入
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:我的项目日志与心得
  • ylj103037496用户头像
  • ylj103037496
  • (YLJ)
  • 等 级:
#3楼 得分:0回复于:2009-01-23 14:35:14
谢谢两位。我的理解看来没大错。谢谢
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:年前面趋逝科技的一套比试题求解
  • lbjfeng用户头像
  • lbjfeng
  • (宝剑锋)
  • 等 级:
#4楼 得分:0回复于:2009-01-23 14:50:53
ls说的对。
因为你没哟刷新缓冲区,所以回车被getchar接受到
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:用C++判断字符串是否为中文
管理菜单结  帖发  帖回  复
相关问题
极度不解!望各位帮忙! C/C++ / C语言- CSDN社区community.csdn.net
在构造一个二维结构数组时出现了不解的现象C/C++ / C语言- CSDN社区 ...
哪位高手给我解释一下这个程序
关于scanf的基础语法问题。 C/C++ / C语言- CSDN社区community.csdn.net
天才啊,帮帮我的忙吧!!!看看以下这段代码~~~~ C/C++ / C语言- CSDN社区 ...
函数调用不解,为什么调用不了在这里C/C++ / C++ 语言- CSDN社区 ...
  
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告
京 ICP 证 070598 号
北京创新乐知信息技术有限公司 版权所有
 联系邮箱:webmaster@csdn.net
Copyright © 1999-2012, CSDN.NET, All Rights Reserved GongshangLogo
[关闭]
[关闭]

原创粉丝点击