gpt4 book ai didi

c - 这对 getchar() 方法不起作用是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:09 24 4
gpt4 key购买 nike

这是我自己的实验,目的是了解幕后情况,这个程序对编译器意味着什么?

main()
{
int c;
printf("%d\n",c);
printf("%d ", getchar());


while ((c == getchar()) != EOF){
putchar(c);
}
}

当我说 c 必须等于 getchar() (c == getchar()) 时,它不是通过 while 循环进行的吗?现在我真的对自己的代码感到困惑,对 c 的含义感到困惑!

另外,在这段代码中:

main()
{
int c;
c = getchar()
while ((c = getchar()) != EOF)
putchar(c);
}

如果我们将int c修改为int c = getchar(),为什么我们不能简单地这样写:

while (c != EOF)(
putchar(c);
c = getchar();
}

编译器应该从前面的语句中知道c = getchar(),为什么还要重写语句呢?对不起,如果我感到困惑。

最佳答案

while ((c==getchar()) != EOF) {
...
}

是一个 while 循环。它评估循环的每次迭代的条件,并仅在条件为假时终止。

在您的情况下,条件是:

(c==getchar()) != EOF)

这是一个无意义的表达,但我们还是要检查一下:

首先,程序将评估:

    getchar()

这会从标准输入中获取击键。表达式的值是键的值。

然后:

 c==getchar()

这会获取 getchar() 的结果并将其与 c 中当前的任何内容进行比较。在您的第一个程序中,c 未初始化,因此它的值是不确定的。如果 c 有定义的值,则 c==getchar() 的计算结果将是 truefalse。因为 c 没有定义值,所以 c==getchar() 也没有定义值。

现在程序计算:

(c==getchar())

它仍然是 truefalse,只是在您的情况下它是未定义的。

接下来程序会考虑:

(c==getchar()) != EOF

也就是说,它将true-false值与EOF进行比较;这没有什么特别的意义,在您的情况下,我们仍然有未初始化的 c 的未定义行为。

总之,如果 c 被初始化,表达式将从标准输入中获取一个键,然后将 truefalseEOF。正如我所说,这是一个荒谬的表达。

关于c - 这对 getchar() 方法不起作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com