EOF练习1-6 K& R C编程语言

时间:2013-04-03 19:52:47

标签: c eof getchar kernighan-and-ritchie

这直接取自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时,它是什么意思?

1 个答案:

答案 0 :(得分:4)

它说:

c = (getchar() != EOF)

表示从stdin读取一个字符,然后将其与EOF进行比较。如果为真,则结果为1,如果为假则为0。然后将该结果分配给c。读取的字符丢失,因此“不良影响”。

它希望你以这种方式自己运行它,看看如何通过发送EOF与任何其他角色来产生0和1。