fflush(stdin)问题?

kkk2017 2014-10-19 08:50:48
在linux上fflush(stdin);没有效果,linux下该如何清除输入缓冲区的数据呢?
while (TRUE)
{
int c;
char cmdbuf[4];
fgets(cmdbuf,4,stdin);
//网上查资料看到可以循环调用getchar()清空缓冲区数据。
while((c = getchar()) != '\n' && c != EOF);
//但是如果fgets(cmdbuf,4,stdin);读完了数据的话,比如只输了2个字符。
//getchar又会在这里会等待输入。
//应该怎么做啊???我只想让fgets每次读数据,没读完的数据都丢弃,getchar这里不等待输入。
printf("%s\n",cmdbuf);
}
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
li4c 2014-10-19
  • 打赏
  • 举报
回复
linux下使用
setbuf(stdin, NULL);
铖邑 2014-10-19
  • 打赏
  • 举报
回复
那就再读一次,把没有回车的扔掉。不要钻牛角尖
kkk2017 2014-10-19
  • 打赏
  • 举报
回复
麻烦你看认真看下我的问题行么? char cmdbuf[1024]; fgets(cmdbuf,sizeof(cmdbuf),stdin); //就算按照你说的,定义cmdbuf[1024]大小,如果输入超过1024个字符,那么输入缓冲区里依然有没有读完的数据。 我的问题是如何清空没读完的数据。。。。。
707wk 2014-10-19
  • 打赏
  • 举报
回复
引用 3 楼 xpdavis 的回复:
char cmdbuf[1024]; fgets(cmdbuf,sizeof(cmdbuf),stdin); 它不是说非要读满1024个字节才返回的,它是碰到回车就返回,如果输入超过四个字符,就可以直接取前四个,剩下的都在缓冲区里面,不用就是了
+1
铖邑 2014-10-19
  • 打赏
  • 举报
回复
char cmdbuf[1024]; fgets(cmdbuf,sizeof(cmdbuf),stdin); 它不是说非要读满1024个字节才返回的,它是碰到回车就返回,如果输入超过四个字符,就可以直接取前四个,剩下的都在缓冲区里面,不用就是了
kkk2017 2014-10-19
  • 打赏
  • 举报
回复
问题是如何清空没读完的数据。
铖邑 2014-10-19
  • 打赏
  • 举报
回复
你多读一些,只取前四个字符就可以了啊

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧