Страницы

Поиск по вопросам

среда, 3 апреля 2019 г.

Как понимается else if в C?

До этого немного учил Python (там "или если" такого не было) Сейчас учу C, читаю книгу и в примере написано else if - что это?
... if (c==...) state = OUT; else if (state == OUT){ state = IN; ...
UPD:
... while ((c = getchar()) != EOF){ ++nc; if (c=='
') ++nl; if(c==' ' || c== '
' || c=='\t') state = OUT; else if(state==OUT){ state = IN; ++nw; } }


Ответ

С одной стороны, вы можете смотреть на эту конструкцию, как на набор последовательно проверяемых условий:
if (cond1) // выполняется cond1? { code1; // да -> выполняем code1 } else if (cond2) // нет? проверяем дальше: выполняется cond2? { code2; // да -> выполняем code2 } else if (cond3) // нет? проверяем дальше: выполняется cond3? { code3; // да -> выполняем code3 } else { code4; // все проверки не прошли - выполняем code4 }
То есть это есть некий аналог switch
С другой стороны, в этой конструкции используется то, что else относится к ближайшему if, а значит, if после else — просто содержимое else-клаузы (которую можно для ясности отделить фигурными скобками):
if (cond1) { code1; } else { if (cond2) { code2; } else { if (cond3) { code3; } else { code4; } } }
Таким образом, мы остаёмся в пределах привычного if с двумя вариантами. Хотя так обычно не пишут, чтобы не плодить уровни вложенности.

Обновление:
Давайте разберём актуальный код:
while ((c = getchar()) != EOF) { // считать следующий символ и проверить // не кончился ли stdin ++nc; // увеличить счётчик символов if (c=='
') // если строка закончилась, ++nl; // увеличить счётчик строк if(c==' ' || c== '
' || c=='\t') // если текущий символ -- пробел, state = OUT; // перейти в состояние "между словами" else if(state==OUT){ // иначе текущий символ не пробел, и // если мы были в состоянии "между словами" state = IN; // то перейти в состояние "в слове" ++nw; // и увеличить счётчик слов } }
Судя по всему, это утилита wc?

Комментариев нет:

Отправить комментарий