c - 以 EOF 结尾的 fgets 循环会跳过下一个 fgets

标签 c input fgets eof

我试图在完成未定义数量的另一个输入后获取用户输入。但问题是 while 循环之后的第二个 fgets 永远不会被调用。我用 EOF 结束循环,也许这就是错误。但我不知道应该如何结束循环。

另一个有趣的事情是:这是我的 C 编码课上的一个任务,讲师有一个她的解决方案的视频,如果我 1:1 复制她的代码,它也不起作用。它还会跳过第二个 fgets 调用。

我已经将代码削减到绝对最低限度以获取错误,但正如您所看到的:几行代码却不起作用。我什至尝试用 GDB 调试它,但我不知道如何让它像视频中那样运行。

#include <stdio.h>
int main() {
    char input[80];
    while (fgets(input, 80, stdin) != NULL) {
        // nop
    }
    fgets(input, 80, stdin);
    printf("%s\n", input);
    return 0;
}

最佳答案

当你第一次在 mac 中按 ctrl+d = EOF 时(我猜在 Windows 上也是一样),你必须退出 while 循环。

当您再次按下它时,循环后的 fgets 就会工作并打印最后一行。

对不起我的英语:)

关于c - 以 EOF 结尾的 fgets 循环会跳过下一个 fgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57648464/

相关文章:

angular - angular4 应用程序中输入的最小值和最大值

forms - 是否可以创建一个表单,其中输入字段填写所有可用空间?

c - 从文件中写入和读取并按升序对它们进行排序

c - 使用 fgets 从文件中读取

c - 具有灵活数组成员的返回结构

使用不同的端口连接到 tcp 服务器。不是 set.c 语言的端口

javascript - 当用户按下回车键时触发,但当焦点丢失时不触发

c: fgets 函数读取文件但不打印到终端

c - 按字符读取 UTF-16 CSV 文件

c - localtime 的结果结构如何在 C 中分配?