我正在通过K & R中的一些练习来工作。练习1-6要求验证表达式getchar() != EOF
是0还是1.我理解它的原因,但代码我写信证明它没有按预期工作。我写了下面的两个片段:putchar和printf没有像预期的那样运行
版本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;
}
我的问题:
当我在一个角色类型和命中进入与版本一,为什么我在屏幕上看不到0或1?相反,我的光标移动到下一行的第一个位置,否则为空。我虽然
putchar
会发送c
到stdout
。尽管在第二个版本中使用
printf
确实会产生0或1,但它会为每个非EOF字符(我在输入的每个字符在两个连续行上看到数字1)重复1。为什么?
非常感谢您的想法。如果有您认为有用的参考资料,请发送链接。
澄清:
我知道我指定的C 0或1。这就是我想要做的值,它是行使想要什么。这也是为什么我没有围绕c = getchar()
的括号。我的问题更多的是理解为什么产量不符合我的预期。对不起,有任何困惑。
你应该启用警告'-Wall -Wtratra' – Stargateur
我实际编译了gcc代码。我在一个由课程(CS50)提供的IDE中工作,当我尝试使用make和clang编译时,我不能。这些警告不会阻止我的代码编译? – BruceM
“每个非EOF字符为1” - >所有字符均为非EOF。 End-of_file是一个条件,而不是一个字符。 – chux