小编H3G*_*ght的帖子

C、K&R 练习 1-6,卡住,困惑

我是一名菜鸟,自学使用《C 编程语言》第二版K&R编写)进行 C 语言编程。在第 1 章第1.5.1 节文件复制中,作者非常简要地介绍了在值之间进行比较时的操作优先级,强调了使用括号的重要性,在本例中,以确保在比较之前对变量“c”进行赋值被评估。他们断言:

    c = getchar() != EOF
Run Code Online (Sandbox Code Playgroud)

相当于

    c = (getchar() != EOF)
Run Code Online (Sandbox Code Playgroud)

其中“设置为 0 或 1 会产生不良影响c,具体取决于 getchar 的调用是否遇到文件结尾”

然后作者提出练习 1-6 - 验证表达式getchar () != EOF是 0 或 1

根据作者之前的断言,这看起来几乎微不足道,所以我创建了以下代码:

#include <stdio.h>

main()
{
    int c;

    while (c = (getchar() != EOF))
        putchar(c);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我运行该程序时,如果遇到 EOF,它只会输出我在命令窗口中键入的任何字符,而不是预期的 1 或 0 字符串。

虽然我是一个菜鸟,但我认为我明白了作者试图教授的逻辑,但我无法演示这个简单的任务。在这种情况下,变量不应该c采用比较表达式求值的值,而不是恰好getchar()获取的任何字符,特别是因为括号的位置?如果c确实采用比较的值,则putchar()应该只输出 0 或 1,但按照公式,它会输出我在命令窗口中键入的内容。我究竟做错了什么?我不明白什么?难道是我的编译器的问题?我正在 x64 …

c putchar getchar

4
推荐指数
1
解决办法
1077
查看次数

标签 统计

c ×1

getchar ×1

putchar ×1