是否有其他方法可以在不使用
的情况下清除c中的输入缓冲区 fflush();
或
while(getchar()!='\n');
因为我已经在任何地方阅读过,无法找到其他任何方法。
答案 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个字符并将其丢弃。