K&R 1.5.4,如果在此代码示例中,任何人都可以解释else吗?

境界

我痛苦地走过了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

要么

如果状态为OUT,则不执行任何操作,否则将状态更改为IN,如果状态为IN,则将+1更改为nw

文本中的注释是:“ [...] else后面的[语句是一个if,它控制两个大括号中的语句。”

由于某种原因,我很难了解那里发生的事情。有人可以帮忙吗?每当我看到这个时,我都会冻结。

观察者

如果您遇到以下任何一种情况:spacetabnewline然后它将您的位置/状态设置OUT为指示您当前不在某些文本中间(示例asd673r23@#$#),这意味着您刚刚在字符串中找到了另一个单词,因此它将总数 字数乘以1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章