这直接取自K&R书:
!=的优先级高于=,这意味着在没有括号的情况下,关系测试!=将在赋值=之前完成。所以声明 C= getchar() != EOF 等于 C= (getchar() != EOF) 这会产生不希望的效果,将c设置为0或1,这取决于getchar的调用是否返回文件结束。(详见第二章) 练习1-6.验证表达式getchar() != EOF为0或1.
我很难理解如何做这个练习,也很难理解这段引文的内容。
我知道EOF是int类型的符号常数,通常包含-1的值。由于负值int在进行比较时永远不能保持与char相同的值,因此需要将其提升为int,然后以某种方式表示文件的结束。
我也知道,如果没有上面指定的括号,比较!=是在赋值之前完成的,但这到底意味着什么呢?这种功能发生了什么?另外,我打印了EOF的值,它是-1,当它说验证它是0还是1时,它意味着什么?
发布于 2013-04-03 20:01:23
据说:
c = (getchar() != EOF)
意思是从stdin读取一个字符,然后与EOF进行比较。其结果是1(如果为真),0(如果为false )。然后将结果分配给c。被读取的字符丢失了,因此“不想要的效果”。
它希望您自己运行这一点,看看如何通过发送EOF和任何其他字符来生成0和1。
https://stackoverflow.com/questions/15796758
复制相似问题