Объясните код - C (СИ) (156494)

Узнай цену своей работы

Формулировка задачи:

Я новичек в программировании на Си, и нашел более понятную книгу по СИ (Керниган и ритчи). Там есть код, но я не могу понять некоторые инструкции! Привожу код:
#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, а как тогда программа считает первое слово? Голова уже взрывается, но надеюсь на ваше объяснение))
Теперь основной вопрос: В начале программы значение переменной state = OUT, т.е. 0, а как тогда программа считает первое слово?
Передохнул и собрался с мыслями... Раз статус изначально OUT, то выполняем
else if (state == OUT) { //А почему здесь else if?
state = IN;
Но все равно смущает else if! Инфы в интернете про такой оператор найти не могу, знаю только про их отдельное использование, но не совместное в таком формате!

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;
    }   
}

Объяснение кода листинга программы

  1. Проверка условия: c == ' ' || c == '\n' || c == '\t'
  2. Если условие истинно, то присваиваем переменной state значение OUT.
  3. Если условие ложно, то проверяем значение переменной state.
  4. Если значение переменной state равно OUT, то присваиваем переменной state значение IN.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5