清除c中输入缓冲区的替代方法

时间:2014-12-03 13:44:59

标签: c

是否有其他方法可以在不使用

的情况下清除c中的输入缓冲区
  fflush();

  while(getchar()!='\n');

因为我已经在任何地方阅读过,无法找到其他任何方法。

3 个答案:

答案 0 :(得分:2)

最好的解决方案是不要依赖输入缓冲区的状态。

使用fgets()作为整行读取输入,然后解析它们。不要使用例如scanf()读取单个值,因为它以烦人的方式与缓冲区进行交互。

答案 1 :(得分:2)

使用fgets()作为建议@unwind最佳方法。

要冲到行尾。

void FlushStdin(void) {
  int ch;
  while(((ch = getchar()) !='\n') && (ch != EOF));
}

如果stdin已全部准备好刷新到行尾,则调用FlushStdin()或其他已发布的scanf()fgetc()解决方案将刷新到结束时下一个行。

如果下一个scanf("%*[^\n]%*1[\n]");char,请注意'\n'

答案 2 :(得分:1)

清除输入缓冲区(stdin)的另一种方法是使用

scanf("%*[^\n]%*1[\n]");

此处,%*[^\n]指示scanf扫描所有内容,直到找到换行符(\n),然后将其丢弃。%1*[\n]告诉scanf扫描包含\n字符的1个字符并将其丢弃。