#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; } }
Комментариев нет:
Отправить комментарий