Объясните код - C (СИ) (156494)
Формулировка задачи:
Я новичек в программировании на Си, и нашел более понятную книгу по СИ (Керниган и ритчи).
Там есть код, но я не могу понять некоторые инструкции! Привожу код:
Теперь основной вопрос: В начале программы значение переменной state = OUT, т.е. 0, а как тогда программа считает первое слово?
Голова уже взрывается, но надеюсь на ваше объяснение))
Передохнул и собрался с мыслями...
Раз статус изначально OUT, то выполняем
Но все равно смущает else if!
Инфы в интернете про такой оператор найти не могу, знаю только про их отдельное использование, но не совместное в таком формате!
#define IN 1 //В слове #define OUT 0 //Вне слова int main() //Объявляем функцию { int nl, nw, nc, c, state; // nl - Кол-во строк, nw - кол-во слов, nc - кол-во символов, c - переменная в которую записываем данные из входного потока, да? state = OUT; // Мы пока вне слова nl = nw = nc = 0; // Передаем всем данным переменным значение 0 while ((c = getchar()) != EOF) { //Здесь ясно, пока переменная c не получит значение EOF ++nc; //добавляем к значению переменной nc единицу if (c == '\n') //Так же если обнаруживаем пробел в переменной c ++nl; //то добавляем единичку в переменную nl if (c == ' ' || c == '\n' || c == '\t') //Если обнаруживаем в переменной c значение, равное одному из приведенных значений state = OUT; //то обозначаем выход из слова else if (state == OUT) { //А почему здесь else if? Это как бы отдельный цикл? А так, если мы вышли из слова state = IN; // то начинаем новое слово и ++nw; //добавляем единичку в nw } } printf("\n%d new characters\n%d new lines\n%d new words\n", nc, nl, nw); }
Теперь основной вопрос: В начале программы значение переменной state = OUT, т.е. 0, а как тогда программа считает первое слово?
else if (state == OUT) { //А почему здесь else if? state = IN;
UPD
else if означает - иначе если state == OUT, то делаем state = IN Это значит, если предыдущие условные операторы возвращают false, только тогда выполняем else if, да?Решение задачи: «Объясните код»
textual
Листинг программы
if (c == ' ' || c == '\n' || c == '\t') { state = OUT; } else { if (state == OUT) { state = IN; } }
Объяснение кода листинга программы
- Проверка условия:
c == ' ' || c == '\n' || c == '\t'
- Если условие истинно, то присваиваем переменной
state
значениеOUT
. - Если условие ложно, то проверяем значение переменной
state
. - Если значение переменной
state
равноOUT
, то присваиваем переменнойstate
значениеIN
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д