Quel est le besoin d’utiliser l’état IN et OUT dans le script suivant?

Bonjour à tous, je viens de commencer à apprendre le langage C à travers THE c PROGRAMMING LANGUAGE Second Edition de Brian. W.Kernighnan (ISBN-13: 978-8131704943)

Alors, voici un script qui compte les caractères, la ligne, les mots

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

Cependant, j’ai créé un script qui ne nécessite pas de définir l’état IN et 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); } 

Alors, quelle est la différence entre ces deux, pourquoi l’auteur utilise-t-il l’état pour définir IN et OUT ??

[EDIT] Oh! Je vois que le script évite simplement deux choses: 1. Éviter le décompte de mots lorsqu’il y a plus d’un espace après le mot. 2. Deuxièmement, mon script compterait n-2 mots, je suppose, si l’espacement est respecté. Ce qui rend le script de l’auteur plus complet … Y a-t-il autre chose à part ces deux ??

Et merci pour vos réponses aussi ….

PS: Je suis désolé, c’est un peu hors-sujet, est-ce que ça va d’appeler la question [RESOLU] ou y a-t-il un autre moyen de le faire?

Votre version est légèrement différente de la sienne: dans votre programme, si vous avez N espaces consécutifs, ils seront considérés comme N – 1 mots, car pour chaque espace, vous ajoutez un au nombre de mots. De plus, le dernier mot saisi ne sera pas pris en compte.

IN signifie littéralement “à l’intérieur d’un mot” et OUT signifie littéralement “à l’extérieur d’un mot”. Il suit l’état du curseur proverbial alors qu’il se déplace à travers les lignes.