我在编写代码时使用了fgets获取用户输入。然后,我编写了一个循环来持续询问用户输入,直到用户打印出quit。但第二次它询问时,“Please enter your input”写了2次而不是1次,并且第一次没有等待我的输入。
所以,我谷歌了一下,发现stdin缓冲区被填满了,需要清除。
我找到了这个解决方案:
void dump_line(FILE * fp) {
int ch;
while ((ch = fgetc(fp)) != EOF && ch != '\n') {
/* null body */;
}
}
然后从主函数调用:
dump_line(stdin);
我很难理解这个问题。据我理解,它只是将“ch”赋值为fgetc(stdin)的值。我无法理解将fgetc(stdin)赋值给“ch”如何清除缓冲区。
非常感谢您的帮助!