【发布时间】:2013-05-05 08:20:55
【问题描述】:
作为this问题的答案,
发生的事情正是你所说的,!= 的优先级 高于=。
这意味着 != 比 = 更难绑定,并且
while(inp = getchar() != EOF) {
等价于;
while(inp = (getchar() != EOF)) {
这会将 inp 设置为比较的布尔值,而不是 您正在寻找的字符值。
这个答案被认为是真实的。但是,有一部分让我很困惑,最后一句话:
这会将 inp 设置为比较的布尔值,而不是 您正在寻找的字符值。
在这里,如果 inp 设置了一个 bool 值(我相信这是真的),为什么我们在使用 putchar(inp) 时看不到该值?为什么我们在屏幕上看不到 0 或 1?
问题:
在 The C Programming Language, 2nd Edition 的第 17 页中,作者说
The precedence of != is higher than that of =
所以当我想测试它时,它不是那样的。这是我的简单程序:
#include <stdio.h>
int main() {
int inp;
while(inp = getchar() != EOF) {
putchar(inp);
}
}
我尝试读取输入并将其显示给用户。当我尝试时,什么也没有发生,屏幕是空的,但是当我尝试这个时,一切正常:
#include <stdio.h>
int main() {
int inp;
while((inp = getchar()) != EOF) {
putchar(inp);
}
}
怎么了?我有 gcc 版本 4.2.1(基于 Apple Inc. build 5658)(LLVM build 2336.11.00)。
【问题讨论】:
-
值
0和1的字符在显示屏上不可见。试试putchar(inp + '0');或printf("%02X", inp); -
它将输出字符
SOH,其 ascii(或其他当前系统区域设置编码)值为 1(不可打印的字符)取决于您正在运行的控制台,您可能什么也得不到或垃圾字符。 -
当我使用 putchar(inp + '0'); 和 printf("%02X", inp); 时得到 11选项,我得到 0101。
-
@ErcanOzturk 在格式字符串
printf("%02X\n", inp);中输入一个换行符,您可能会看到它在每次迭代时打印“01”(字符的ascii 代码)。 -
是的,当我使用 printf("%02X\n", inp); 时,它会打印 01;当我输入 EOF 时,它什么也不打印(只是一个空行)。