Подсчет слов, пояснить участок кода - C (СИ)

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

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

Добрый день! Начал учить С по книге Кернигана, Ричи. и вот на пункте "1.5.4. Подсчет слов " немного застопорился:
#include <stdio.h>
#define IN 1
#define OUT 0
 
main()
{
  int c, nl, nw, nc, state;
  state = OUT;
  nl = nw = nc = 0;
  
  while ((c = getchar())!=EOF)
  
  {
    ++nc;
    if(c == '\n')
        ++nl;
    if (c == ' ' || c == '\n' || c == '\t')
        state = OUT;
    else if (state == OUT)
        {
            state = IN;
            ++nw;
            
        }
  }
  
  printf ("%d %d %d \n", nl, nw,nc);
}
а конкретно непонятен вот этот участок:
if (c == ' ' || c == '\n' || c == '\t')
        state = OUT;
    else if (state == OUT)
        {
            state = IN;
            ++nw;
            
        }
почему выполняя проверку else if (state == OUT) он присваивает state = IN; ? растолкуйте добрые люди для новичка, спасибо.

Решение задачи: «Подсчет слов, пояснить участок кода»

textual
Листинг программы
#include <stdio.h>
 
int main(int argc,char** argv)
{        
   int   TestChr = 0;
   int   CharCnt = 0;
   int   LineCnt = 0;
   int   WordCnt = 0;
 
   bool  bNewWord = false;
 
   while ((TestChr = getchar()) != EOF)
   {
      ++CharCnt;
 
      if (TestChr == '\n')
      {
         ++LineCnt;
      }
 
      if (TestChr == ' ' || TestChr == '\n' || TestChr == '\t')
      {
         // Whitespace
         bNewWord = false;
      }
      else if (!bNewWord)
      {
         // Not Whitespace
         bNewWord = true;
         ++WordCnt;
      }
   }
 
   printf("Stats:  LC = %d,  WC = %d,  CC = %d\n",LineCnt,WordCnt,CharCnt);
 
   return 0;
}

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

  1. Объявлены пять переменных: TestChr, CharCnt, LineCnt, WordCnt и bNewWord типа int.
  2. Переменная TestChr инициализируется значением 0.
  3. Переменные CharCnt, LineCnt и WordCnt инициализируются значением 0.
  4. Переменная bNewWord инициализируется значением false.
  5. Запускается цикл while, который выполняется до тех пор, пока TestChr не станет равным EOF.
  6. Внутри цикла увеличивается значение CharCnt на 1.
  7. Если TestChr становится равным '\n', то увеличивается значение LineCnt на 1.
  8. Если TestChr становится равным ' ' или '\n' или '\t', то значение bNewWord становится равным false.
  9. Если TestChr не становится равным ' ' или '\n' или '\t' и значение bNewWord равно false, то значение bNewWord становится равным true, а значение WordCnt увеличивается на 1.
  10. По завершении цикла, выводится сообщение с значениями переменных LineCnt, WordCnt и CharCnt.
  11. Возвращается значение 0, что означает успешный конец работы программы.

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


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

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

7   голосов , оценка 3.714 из 5
Похожие ответы