| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1843 人关注过本帖, 1 人收藏
标题:while((c = getchar())!='\n'&&c!=EOF);//清空缓存问题!请各位给我分析下。 ...
只看楼主 加入收藏
C_596322153
Rank: 6Rank: 6
来 自:徽州
等 级:侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:3 
while((c = getchar())!='\n'&&c!=EOF);//清空缓存问题!请各位给我分析下。。。
代码:
程序代码:
#include "stdio.h"
int main(void)
{
  int a,c;
  for(;;)
  {
    printf("please input a integer:");   
    scanf("%d",&a);
    if(feof(stdin)||ferror(stdin))
     {
      break;   
     }
    while((c = getchar())!='\n'&&c!=EOF);//清空缓存
    printf("%d\n",a);
  }
  return 0;
}
请各位 给我分析下 while((c = getchar())!='\n'&&c!=EOF);//清空缓存  这句为啥能实现 清空缓存功能啊!越详细越好  本人新手 虚心求教
2012-02-11 09:41
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:5 
while((c = getchar())!='\n'&&c!=EOF); 这句是一直读取缓存,直到遇到换行和结束符,就结束循环。这样c = getchar()就吸收了缓存里所有的东西包括换行。

梅尚程荀
马谭杨奚







                                                       
2012-02-11 10:58
C_596322153
Rank: 6Rank: 6
来 自:徽州
等 级:侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
收藏
得分:0 
回复 2楼 有容就大
谢谢2楼  追问下:feof(stdin)这个我在函数库里找到了 是检查文件是否结束 ferror(stdin)是啥意思?退出程序要按 ctrl+z 这是不是结束符啊!scanf不是把数据送到缓存吗?缓存清空了 怎么输出啊   不太懂  小白了   
2012-02-11 11:42
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:5 
stdin它的功能是从键盘输入字符,然后将其送到控制台.
ferror(stdin)是检查输入是否有错误,如果错返回1,没问题返回0.
if(feof(stdin)||ferror(stdin))是说如输入结束或者输入出错则条件为真,实施break; 操作,跳出for循环,也就是结束输入。ctr+z就是结束符。
这是个循环输入输出,中间用while((c = getchar())!='\n'&&c!=EOF);清空缓存。清空的是一个连续数字后不是数字字符开始的所有字符包括enter键传入的字符。scanf()按格式匹配读取相应的字符,剩下的字符都在缓存里了,这些才是被清空的对象。
我是这么理解的如有错误请大家指正,你也可以看看相关的函数说明。


[ 本帖最后由 有容就大 于 2012-2-11 12:22 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-02-11 12:07
快速回复:while((c = getchar())!='\n'&&c!=EOF);//清空缓存问题!请各位给我分 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020541 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved