我是一名菜鸟,自学使用《C 编程语言》第二版(K&R编写)进行 C 语言编程。在第 1 章第1.5.1 节文件复制中,作者非常简要地介绍了在值之间进行比较时的操作优先级,强调了使用括号的重要性,在本例中,以确保在比较之前对变量“c”进行赋值被评估。他们断言:
c = getchar() != EOF
Run Code Online (Sandbox Code Playgroud)
相当于
c = (getchar() != EOF)
Run Code Online (Sandbox Code Playgroud)
其中“设置为 0 或 1 会产生不良影响c,具体取决于 getchar 的调用是否遇到文件结尾”
然后作者提出练习 1-6 - 验证表达式getchar () != EOF是 0 或 1
根据作者之前的断言,这看起来几乎微不足道,所以我创建了以下代码:
#include <stdio.h>
main()
{
int c;
while (c = (getchar() != EOF))
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我运行该程序时,如果遇到 EOF,它只会输出我在命令窗口中键入的任何字符,而不是预期的 1 或 0 字符串。
虽然我是一个菜鸟,但我认为我明白了作者试图教授的逻辑,但我无法演示这个简单的任务。在这种情况下,变量不应该c采用比较表达式求值的值,而不是恰好getchar()获取的任何字符,特别是因为括号的位置?如果c确实采用比较的值,则putchar()应该只输出 0 或 1,但按照公式,它会输出我在命令窗口中键入的内容。我究竟做错了什么?我不明白什么?难道是我的编译器的问题?我正在 x64 …