【发布时间】:2016-12-04 11:49:00
【问题描述】:
我在谷歌和这里做了很多关于如何正确刷新输入流的搜索。我听到的只是关于 fflush() 如何为输入流未定义的混合争论,有人说就那样做,而其他人只是说不要这样做,我没有太多运气找到一个明确的效率/这样做的正确方式,大多数人都同意..我在编程方面很新,所以我还不知道该语言的所有语法/技巧,所以我的问题是哪种方式是最有效/最合适的解决方案清除C输入流??
在我尝试接收更多输入之前使用两次
getchar()?只在输入上使用
fflush()函数?或-
这就是我认为我应该这样做的方式。
void clearInputBuf(void); void clearInputBuf(void) { int garbageCollector; while ((garbageCollector = getchar()) != '\n' && garbageCollector != EOF) {} }
所以,每当我需要读取新的 scanf() 或使用 getchar() 暂停程序时,我只需调用 clearInputBuf.. 那么三种解决方案中最好的方法是什么,或者有更好的方法吗?选项?
【问题讨论】:
-
不简单。这就是为什么有像GNU Readline 这样的库来处理输入的原因,因为使用库函数很难做到这一点。
-
对于任何阅读此作为解决方案的人来说,这只是一个旁注!还有其他方法可以更有效地获取输入,但如果您只是学习,这很可能会为您提供足够好的服务,直到您更好地掌握语言!但是我要提到的一件事是,调用 clearInputBuf() 会导致无限循环,直到您将某些内容输入其中,这意味着如果您在它为空时调用它,即使下一次调用是 printf(),它也不会超过调用,直到您给它喂点东西..
-
@Programming_n00b:您可以通过单击分数下方的灰色复选标记来接受其中一个答案。