首页 > 解决方案 > 在 C 中使用 fgets() 处理 CTRL+D 的输入

问题描述

我使用 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,不允许任何进一步的用户输入。

我怀疑这是一个怪癖,没有正确刷新输入流或其他东西,但到目前为止我的解决方案还没有奏效。

标签: cloopsfgets

解决方案


推荐阅读