K&R C 直方图
K&R C Histogram
我目前正在 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('*');
}
}
}
}
不过,看看这段代码:
else {
if (c != '\n' || c != ' ' || c != '\t') {
state = IN;
putchar('*');
}
}
为什么这行得通,但如果我输入 if (state != OUT)
,它却行不通?我最终得到了完全不同的输出。这两个说法本质上不是一回事吗?
c
等于三个项 "or" 彼此不等价 c
不等于相同三个项 "or" 彼此的否定。
我目前正在 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('*');
}
}
}
}
不过,看看这段代码:
else {
if (c != '\n' || c != ' ' || c != '\t') {
state = IN;
putchar('*');
}
}
为什么这行得通,但如果我输入 if (state != OUT)
,它却行不通?我最终得到了完全不同的输出。这两个说法本质上不是一回事吗?
c
等于三个项 "or" 彼此不等价 c
不等于相同三个项 "or" 彼此的否定。