源于《The C Programming Language》P14的一道例题:
统计输入中的行数,单词数,字符数(单词的定义:其中不包括空格,制表符,换行符的字符序列)
#include <stdio.h>
#define IN 1
#define OUT 0
int main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while((c = getchar()) != EOF)
++nc;
if(c == '/n')
++nl;
if(c == ' ' || c == '/t' || c == '/n')
state = OUT;
else if(state == OUT)
{
state = IN;
++nw;
}
return 0;
}
1, 对于第二个if语句,当出现这些字符时,认定一个单词已经结束,故将state赋值为OUT,这一点在设计的时候不太容易想到。
2, 用两个分开的if语句的清晰度高于一个if-else语句(谨针对本例),因为第二个if语句是个if-else语句,如果在第二个ifz之前加上else
会增加阅读的难度。