【发布时间】:2017-07-03 21:39:57
【问题描述】:
我正在完成 K&R 中的一些练习。练习 1-6 要求验证表达式 getchar() != EOF 是 0 还是 1。我理解它的原因,但我编写的代码证明它没有按预期工作。我写了以下两个sn-ps:
版本 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。
1234563 )。为什么?
非常感谢您的想法。如果有您认为有帮助的参考资料,请发送链接。
澄清:
我知道我正在为 c 分配 0 或 1 的值。这就是我想要做的,也是练习想要的。这也是我在c = getchar() 周围没有括号的原因。我的问题更多地涉及理解为什么输出不是我所期望的。如有任何混淆,请见谅。
【问题讨论】:
-
你应该启用警告
-Wall -Wextra -
我其实是用gcc编译了代码。我正在使用课程(CS50)提供的IDE,当我尝试使用make和clang进行编译时,我做不到。这些警告不会阻止我的代码编译吗?
-
"每个非 EOF 字符 1" --> 所有字符都是非 EOF。 End-of_file 是一个条件,而不是一个字符。
-
在编译中添加警告选项的全部目的是防止错误代码编译。编译器比你更了解 C。编译器仅在您告诉它,或者当它确信您编写的内容不是您要编写的内容时才会产生警告。我不运行不能使用
gcc -Wall -Wextra -Werror -O3 -g -Wstrict-prototypes -Wold-style-declarations -Wold-style-definitions -Wmissing-prototypes编译的代码(或者本地 GCC 支持的尽可能多的代码)。我的时间比寻找编译器可以为我发现的错误更好。