我正在痛苦地通过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,它控制大括号中的两个语句。”
不知什么原因,我很难知道那里发生了什么。有人能帮忙吗?我每次看这个都会被冻住。

最佳答案

如果您遇到以下任何一个:spacetabnewline时,它会将您的位置/状态设置为OUT,这表示您当前没有处于某个文本(例如asd673r23@#$#)中,并且它表示您刚刚在字符串中找到另一个单词,因此它会将单词总数增加1。

10-01 22:47
查看更多