【问题标题】:Read integers until EOF in C在 C 中读取整数直到 EOF
【发布时间】:2023-09-29 16:56:01
【问题描述】:

我需要读取所有整数,直到 EOF。我正在尝试这段代码,问题是程序没有检测到 EOF 并继续运行。我需要的是接收所有数据并自动执行下一行代码(代码在输入后按 Ctrl-D 即可工作)。

int x, sum = 0;

while (scanf("%d", &x) == 1) {
    sum += x;
}

if (feof(stdin)) {
    printf ( "SUM: %d\n", sum );
} else {
    printf("ERROR\n");
}

return 0;

【问题讨论】:

  • 那有什么问题?
  • 您已正确完成所有操作,并且它的行为应如此。当您的标准输入是终端时,^D 发送 EOF,它也适用于真实文件。
  • 也许对于 EOF 对 STDIN 的含义存在混淆?这并不意味着“空白行”。

标签: c eof


【解决方案1】:

你想如何指定EOF?

  • ^D 是在 Unix 终端中执行此操作的方式。在 Windows 终端中,^Z 做同样的事情。 scanf 将返回 -1 并且 feof() 将非零。但任何来自标准输入的进一步输入也会失败。

  • 您只想按回车键吗?如果是这样,您必须在scanf 之后检查它,否则下一次调用scanf 将读取换行并忽略它。

  • 如果您键入的内容既不是空格也不是数字,scanf 将返回 0 并将不匹配的字符留在输入流中。您的程序将打印ERROR。这是怎么回事?

【讨论】:

    最近更新 更多