清除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
字符并丢弃它。