我正在完成 K&R 中的一些练习。练习 1-6 要求验证表达式getchar() != EOF
是 0 还是 1。我明白为什么会这样,但是我编写的代码证明它没有按预期工作。我写了以下两个片段:
版本 1:
int main(void)
{
int c;
while (c = getchar() != EOF)
{
putchar(c);
}
printf("%d at EOF\n", c);
return 0;
}
版本 2:
int main(void)
{
int c;
while (c = getchar() != EOF)
{
printf("%d\n", c);
}
printf("%d at EOF\n", c);
return 0;
}
我的问题:
当我输入一个字符并使用版本一按 Enter 时,为什么我在屏幕上看不到 0 或 1?相反,我的光标移动到下一行的第一个位置,否则为空。我虽然
putchar
会发送c
到stdout
.虽然
printf
在第二个版本中使用确实会适当地产生 0 或 1,但它会为每个非 EOF 字符复制 1(我在我输入的每个字符的两个连续行上看到数字 1)。为什么?
非常感谢您的想法。如果有您认为有帮助的参考资料,请发送链接。
澄清:
我知道我正在分配 0 或 1 的 ca 值。这就是我想要做的,也是练习想要的。这也是我周围没有括号的原因c = getchar()
。我的问题更多地涉及理解为什么输出不是我所期望的。很抱歉有任何混淆。