<分区>
我是一个菜鸟,使用C 编程语言,第二版(由K&R)自学用 C 编程。在第 1 章 1.5.1 文件复制 部分,作者在比较值时非常简要地谈到了操作优先级,强调了使用括号的重要性,在这种情况下,以确保分配给评估比较之前的变量“c”。他们断言:
c = getchar() != EOF
相当于
c = (getchar() != EOF)
“将 c
设置为 0 或 1 会产生不良影响,具体取决于 getchar 的调用是否遇到文件结尾”
然后作者提出了练习 1-6 - 验证表达式 getchar () != EOF
是 0 还是 1
根据作者之前的断言,这似乎微不足道,所以我创建了这段代码:
#include <stdio.h>
main()
{
int c;
while (c = (getchar() != EOF))
putchar(c);
}
不幸的是,当我运行该程序时,如果遇到 EOF,它只会输出我在命令窗口中键入的任何字符,而不是预期的字符串 1 或 0。
虽然我是菜鸟,但我想我明白了作者试图教授的逻辑,但我无法演示这个简单的任务。在这种情况下,变量 c
不应该采用比较表达式求得的值,而不是 getchar()
碰巧获取的任何字符,特别是因为括号?如果 c
确实接受了比较的值,putchar()
应该只输出 0 或 1,但按照公式,它会输出我在命令窗口中键入的内容.我究竟做错了什么?我有什么不明白的?会不会是我的编译器?我在 x64 架构的 Windows 10 上的 Visual Studio 2017 社区版中编码。我有 Tiny C 编译器,但还没有尝试使用 TCC 从命令提示符执行。