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

是否有任何其他方法来清除c输入缓冲区使用

fflush(); 

要么

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

因为我已经在任何地方阅读它,并且无法找到任何其他方法来做到这一点。

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

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

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

冲到行尾。

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

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

注意scanf("%*[^\n]%*1[\n]"); 如果下一个char'\n'则不起作用。

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

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

这里, %*[^\n]指示scanf扫描所有内容,直到找到换行符( \n )然后丢弃它。 %1*[\n]告诉scanf扫描1个字符,包括\n字符并丢弃它。