【发布时间】:2016-04-07 13:49:39
【问题描述】:
我目前正在 K&R 的 C 编程语言第 2 版中做练习 1-13。我决定从一个简单的直方图开始,它只是用“*”替换单词中的每个字母。
#include <stdio.h>
// histogram
#define IN 1
#define OUT 0
main() {
int c, state;
state = OUT;
while ((c = getchar()) != EOF) {
if (c == '\n' || c == '\t' || c == ' ') {
state = OUT;
putchar('\n');
}
else {
if (c != '\n' || c != ' ' || c != '\t') {
state = IN;
putchar('*');
}
}
}
}
不过,看看这段 sn-p 的代码:
else {
if (c != '\n' || c != ' ' || c != '\t') {
state = IN;
putchar('*');
}
}
这是怎么回事,但是如果我输入 if (state != OUT) ,它就不起作用?我最终得到了完全不同的输出。这两种说法本质上不是一回事吗?
【问题讨论】:
-
这两个陈述本质上不是一回事吗?
-
只是运行一些简单的例子。考虑一个输入行,一个字母后跟一个换行符。
state以值OUT开头。第一个getchar阅读了这封信。显示的代码将输出*。您的代码版本不会输出任何内容(因为if (state != OUT)将是错误的)。