我正在通过do-while循环从用户那里获取标准输入,并且其中包括基本的错误处理:
#include <stdio.h>
int validateInput(char *buffer, int bufferSize)
{
if (fgets(buffer, bufferSize, stdin) == NULL) /* If fgets() errors */
{
fprintf(stderr, "ERROR: Malformed input\n");
return 1;
}
return 0;
}
int main()
{
char buffer[1024];
do
{
printf("\nInput stuff: ");
} while (validateInput(buffer, sizeof(buffer)) == 1);
return 0;
}
代码运行良好,在第一次检查缓冲区溢出之后还有第二条if
语句(未显示,因此是该函数的第二个参数),也很正常。
问题是,如果我自己输入CTRL+D
(<some input> then CTRL+D
正常),代码将无限期地输出printf
和fprintf
,不允许任何其他用户输入。
我怀疑这是一个不正确地刷新输入流或某些东西的怪癖,但是到目前为止,我的解决方案没有用。