这直接取自K& R书:
!=
的优先级高于=
的优先级,这意味着在没有括号的情况下,关系测试!=
将在分配=
之前完成。声明c = getchar() != EOF
相当于
c = (getchar() != EOF)
这具有将c设置为0或1的不良影响,具体取决于getchar的调用是否返回文件末尾。 (更多内容见第2章。)
练习1-6。验证表达式
getchar() != EOF
是0还是1.
我无法理解如何进行此练习以及了解块引用段落的内容。
我知道EOF是int类型的符号常量,通常保持值-1。由于负值int在进行比较时永远不能保持与char相同的值,因此需要将其提升为int,然后以某种方式表示文件的结尾。
如果没有上面指定的括号,我也可以在分配之前完成比较!=
,但这实际上意味着什么?这个功能发生了什么?我还打印了EOF的值,它是-1,当它说验证它是0还是1时,它是什么意思?
答案 0 :(得分:4)
它说:
c = (getchar() != EOF)
表示从stdin
读取一个字符,然后将其与EOF进行比较。如果为真,则结果为1,如果为假则为0。然后将该结果分配给c
。读取的字符丢失,因此“不良影响”。
它希望你以这种方式自己运行它,看看如何通过发送EOF与任何其他角色来产生0和1。