Страницы

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

пятница, 31 января 2020 г.

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

#c #if


До этого немного учил Python (там "или если" такого не было)
Сейчас учу C, читаю книгу и в примере написано else if - что это?

...
if (c==...)
  state = OUT;
else if (state == OUT){
  state = IN;
...


UPD:

...
while ((c = getchar()) != EOF){
  ++nc;
  if (c=='\n')
    ++nl;
  if(c==' ' || c== '\n' || c=='\t')
    state = OUT;
  else if(state==OUT){
    state = IN;
    ++nw;
  }
}

    


Ответы

Ответ 1



С одной стороны, вы можете смотреть на эту конструкцию, как на набор последовательно проверяемых условий: 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=='\n') // если строка закончилась, ++nl; // увеличить счётчик строк if(c==' ' || c== '\n' || c=='\t') // если текущий символ -- пробел, state = OUT; // перейти в состояние "между словами" else if(state==OUT){ // иначе текущий символ не пробел, и // если мы были в состоянии "между словами" state = IN; // то перейти в состояние "в слове" ++nw; // и увеличить счётчик слов } } Судя по всему, это утилита wc?

Ответ 2



Так понятней? if( c == 1 ) { state = OUT; } else { if( state == OUT ) { state = IN; } }

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

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