K & R 1.5.4, кто-нибудь может объяснить другое, если в этом примере кода? - PullRequest
0 голосов
/ 14 сентября 2018

Я мучительно пробираюсь через K & R 2nd ed. и мне не ясно, что делает окончательный вариант if (else if) в примере 1.5.4.

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, +1 на nw, если состояние IN

Комментарий в тексте: «[...] [оператор] после else представляет собой , если , который контролирует два оператора в скобках».

Почему-то мне трудно понять, что там происходит. Кто-нибудь может помочь? Каждый раз, когда я смотрю на это, у меня замирает мозг.

1 Ответ

0 голосов
/ 14 сентября 2018

, если вы столкнетесь с любым из них: space или tab или newline, тогда он устанавливает вашу позицию / состояние на OUT, что указывает на то, что вы в данный момент не находитесь в середине какого-либо текста (пример asd673r23@#$# ) и это означает, что вы только что нашли другое слово в строке, следовательно, оно увеличивает общее число. слов на 1.

...