Подсчет слов, пояснить участок кода - C (СИ)
Формулировка задачи:
Добрый день! Начал учить С по книге Кернигана, Ричи. и вот на пункте "1.5.4. Подсчет слов " немного застопорился:
а конкретно непонятен вот этот участок:
почему выполняя проверку else if (state == OUT) он присваивает state = IN; ?
растолкуйте добрые люди для новичка, спасибо.
#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;
}Решение задачи: «Подсчет слов, пояснить участок кода»
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;
}
Объяснение кода листинга программы
- Объявлены пять переменных: TestChr, CharCnt, LineCnt, WordCnt и bNewWord типа int.
- Переменная TestChr инициализируется значением 0.
- Переменные CharCnt, LineCnt и WordCnt инициализируются значением 0.
- Переменная bNewWord инициализируется значением false.
- Запускается цикл while, который выполняется до тех пор, пока TestChr не станет равным EOF.
- Внутри цикла увеличивается значение CharCnt на 1.
- Если TestChr становится равным '\n', то увеличивается значение LineCnt на 1.
- Если TestChr становится равным ' ' или '\n' или '\t', то значение bNewWord становится равным false.
- Если TestChr не становится равным ' ' или '\n' или '\t' и значение bNewWord равно false, то значение bNewWord становится равным true, а значение WordCnt увеличивается на 1.
- По завершении цикла, выводится сообщение с значениями переменных LineCnt, WordCnt и CharCnt.
- Возвращается значение 0, что означает успешный конец работы программы.