在 C 中读取整数直到 EOF
Read integers until EOF in C
我需要读取所有整数直到 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;
您想如何指定 EOF?
^D
是在 Unix 终端中执行此操作的方法。在 Windows 终端中,^Z
做同样的事情。 scanf
将 return -1
和 feof()
将是非零。但是来自标准输入的任何进一步输入也会失败。
您只想按回车键吗?如果是这样,您必须在 scanf
之后检查它,否则下一次调用 scanf
将读取换行符并忽略它。
如果您键入的内容既不是白色 space 也不是数字,scanf
将 return 0
并将不匹配的字符保留在输入流。您的程序将打印 ERROR
。这是怎么回事?
我需要读取所有整数直到 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;
您想如何指定 EOF?
^D
是在 Unix 终端中执行此操作的方法。在 Windows 终端中,^Z
做同样的事情。scanf
将 return-1
和feof()
将是非零。但是来自标准输入的任何进一步输入也会失败。您只想按回车键吗?如果是这样,您必须在
scanf
之后检查它,否则下一次调用scanf
将读取换行符并忽略它。如果您键入的内容既不是白色 space 也不是数字,
scanf
将 return0
并将不匹配的字符保留在输入流。您的程序将打印ERROR
。这是怎么回事?