我正在痛苦地通过K&R第二版。我不清楚示例1.5.4中的最终if(else if)在做什么。
include stdio.h
define IN 1
define OUT 0
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 == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
这是否意味着:如果状态为OUT,那么在任何情况下都将状态改为IN,+1改为nw
或
如果state为OUT,则不执行任何操作,否则将state更改为IN,如果state为IN,则将+1更改为nw
文本中的注释是:“[…]else后面的[语句]是一个if,它控制大括号中的两个语句。”
不知什么原因,我很难知道那里发生了什么。有人能帮忙吗?我每次看这个都会被冻住。
最佳答案
如果您遇到以下任何一个:space
或tab
或newline
时,它会将您的位置/状态设置为OUT
,这表示您当前没有处于某个文本(例如asd673r23@#$#
)中,并且它表示您刚刚在字符串中找到另一个单词,因此它会将单词总数增加1。