#include <stdio.h>
/*Checking whether the value of (getchar() != EOF) is 1,
when not reaching the EOF*/
main() {
int c;
printf("Please enter character:\n");
while (c = getchar() != EOF) {
printf("%d\t", c);
}
printf("%d - at EOF\n", c);
}
我在CLion中运行了这段代码,但是在我输入一些单词之前,第一个printf()
天空中的内容出现了问题。
有一个例子。
error
^D
Please enter character:
1 1 1 1 1 1 0 - at EOF
我知道这可能是因为我在注册表中禁用了run.processes.with.pty选项,因为句子“请输入字符:&#39;当选项可用时,它位于正确的位置。但如果我不这样做,我就无法使用 Ctrl + D 来发送EOF。另外,只有当我在字符后的新空行中输入 Ctrl + D 时,结果似乎才是正确的。
平台:Windows 10,工具链:MinGW
顺便说一下,我也试过Cygwin。再次出现同样的问题。有什么想法吗?答案 0 :(得分:1)
问题在于
c = getchar() != EOF
真的只是
c = (getchar() != EOF)
你想要的是
(c = getchar()) != EOF
如果您使用c = getchar() != EOF
$ cc -c test.c -Wall -Wextra test.c:5:1: warning: return type defaults to ‘int’ [-Wimplicit-int] main() { ^~~~ test.c: In function ‘main’: test.c:9:12: warning: suggest parentheses around assignment used as truth value [-Wparentheses] while (c = getchar() != EOF) { ^
这就是建议启用警告的原因。对于新项目,我认为-Wall -Wextra
是最低限度的。
答案 1 :(得分:0)
运营商优先权。 @Johnny Mopp
c = getchar() != EOF
与c = (getchar() != EOF)
相同,当然不是OP想要的。
// while (c = getchar() != EOF)
while ((c = getchar()) != EOF)
但是出现了一个问题,即第一个printf()中的内容没有出现,直到我输入了一些单词。
stdout
通常是缓冲的。它可能是 line 缓冲或完全缓冲或根本没有。使用fflush(stdout)
确保发布输出。
printf("Please enter character:\n");
fflush(stdout); //add
while (c = getchar() != EOF) {
printf("%d\t", c);
fflush(stdout); //add
}
printf("%d - at EOF\n", c);