Объясните код - 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.