3

这直接取自 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 时,这个练习意味着什么?

4

1 回答 1

4

它是这么说的:

c = (getchar() != EOF)

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

它希望您自己以这种方式运行它,以查看如何通过发送 EOF 与任何其他字符来生成 0 和 1。

于 2013-04-03T20:01:23.707 回答