在C

时间:2019-12-11 16:58:29

标签: c loops fgets

我正在通过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正常),代码将无限期地输出printffprintf,不允许任何其他用户输入。

我怀疑这是一个不正确地刷新输入流或某些东西的怪癖,但是到目前为止,我的解决方案没有用。

0 个答案:

没有答案