首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >基础知识 | 每日一面(85)

基础知识 | 每日一面(85)

作者头像
小林C语言
发布2020-03-24 11:12:07
发布2020-03-24 11:12:07
3350
举报

读者:如何清除多余的输入, 以防止在下一个提示符下读入?fflush(stdin)可以吗?

小林:fflush() 仅对输出流有效。因为它对 “flush” 的定义是用于完成缓冲字符的写入, 而对于输入流 fflush 并不是用于放弃剩余的输入。

读者:既然 fflush() 不能, 那么怎样才能清除输入呢?

小林:这取决于你要做什么。如果你希望丢掉调用 scanf()之后所剩下的换行符和未预知的输入, 你可能需要重写你的 scanf() 或者换掉它。或者你可以用下边这样的代码吃掉一行中多余的字符

while((c = getchar()) != ’\n’ && c != EOF)

/* 丢弃 */ ;

你也可以使用 curses 的 flushinp() 函数。没有什么标准的办法可以丢弃标准输入流的未读取字符, 即使有, 那也不够,因为未读取字符也可能来自其它的操作系统级的输入缓冲区。如果你希望严格丢弃多输入的字符 (可能是预测发出临界提示), 你可能需要使用系统相关的技术。

有时候,正是那些意想不到之人,成就了无人能成之事。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档