【发布时间】:2012-02-26 22:24:07
【问题描述】:
我正在编写一些代码并使用 fgets 来获取用户输入。然后我在我的代码上写了一个循环来不断询问用户输入,直到用户打印退出。但是第二次询问时,它写了“请输入您的输入” 2 次而不是 1 次,并且第一次没有等待我的输入。 所以,我用谷歌搜索,发现标准输入缓冲区已满,必须清除。 我找到了这个解决方案:
void dump_line(FILE * fp) {
int ch;
while ((ch = fgetc(fp)) != EOF && ch != '\n') {
/* null body */;
}
}
然后从主函数调用:
dump_line(stdin);
我很难理解它。据我了解,它只是将 fgetc(stdin) 的值分配给“ch”。我根本无法理解如何将 fgetc(stdin) 分配给“ch”来清除缓冲区。 非常感谢您的帮助!
【问题讨论】:
-
缓冲区未填满。它只包含一个您尚未阅读的行终止符,并且您发布的循环已读取。
标签: c