В чем заключается необходимость использования состояний IN и OUT в следующем сценарии?

Привет всем, я только начал изучать С через С ПРОГРАММИРОВАНИЕ ЯЗЫКА Второе издание Брайана. W.Kernighnan (ISBN-13: 978-8131704943)

Итак, вот скрипт, который подсчитывает символы, строки, слова

#include  #define IN 1 #define OUT 0 main() { int c, nl, nw, nc, state; /* c = input, nl = new line, nc = new character, nw = new word, state = (IN/OUT) */ 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(" The number of lines is: %d,\n The number of words is: %d,\n The number of characters is: %d. \n", nl, nw, nc); } 

Однако я сделал сценарий, который делает следующее без необходимости определения состояния IN и OUT

 #include  main() { int nw, nl, nc, c ; nl = nw = nc = c = 0 ; while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; else if (c == ' ' || c == '\n' || c == '\t') ++nw; } printf("Words:%d \nCharacters:%d \nLines:%d", nw, nc, nl); } - #include  main() { int nw, nl, nc, c ; nl = nw = nc = c = 0 ; while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; else if (c == ' ' || c == '\n' || c == '\t') ++nw; } printf("Words:%d \nCharacters:%d \nLines:%d", nw, nc, nl); } 

Так в чем разница между этими двумя, почему автор использует состояние для определения IN и OUT ??

[EDIT] О! Я вижу, что сценарий состоит в том, чтобы избежать двух вещей: 1. Чтобы избежать подсчета слов, когда над словом находится несколько пробелов. 2. Во-вторых, мой сценарий будет считать n-2 слова, я полагаю, если будет выполнен правильный интервал. Что делает авторский сценарий более полным. Есть ли что-то еще, кроме этих двух?

И спасибо вам за ваши ответы тоже ….

PS: Мне жаль, что это немного не по теме, это нормально, чтобы обозначить вопрос [SOLVED] или есть ли другой способ сделать это?

Ваша версия немного отличается от вашей: в вашей программе, если у вас есть N последовательных пробелов, они будут считаться N – 1 словами, потому что для каждого места вы добавляете один к счету слов. Кроме того, последнее слово ввода не рассматривается.

IN буквально означает «внутри слова», а OUT буквально означает «вне слова». Он отслеживает состояние пресловутого курсора, когда он перемещается по линиям.