Le résultat n'est pas exactement celui escompté: lorsque je tape par exemple "hello world" pour le tester, voilà le résultat:
h
ello w
orld
bizarre, non ????
Non pas vraiment.
Explication :
Initialement [etat] = [DEHORS]
Donc le premier passage se fait comme suit :
- On affiche le caractere a traiter ('h')
- Le caractere n est pas un espacement
- Nous sommes dans l [etat] [DEHORS] (valeur initiale)
- On affiche donc '\n' (on ne rentre pas dans le IF mais on rentre dans le
Else If) et [etat] = [DEDANS]
Code: 

- 1er passage affiche :
- h
- [\n]
Ensuite au sixieme passage (' ') :
- on affiche le caractere
- c est un espacement (' '), [etat] = [DEHORS]
Code: 

- 6eme passage affiche :
- h
- ello
Ensuite au septieme passage ('w') :
- on affiche le caractere
- ce n est pas un espacement ('w') et [etat] = [DEHORS] (voir step
precedent)
- Donc on affiche '\n' et [etat] = DEDANS
Code: 

- 7eme passage affiche :
- h
- ello w
- [\n]
Pour remedier a ca, deux choses sont a modifier dans le code :
- afficher le caractere apres le traitement dedans/dehors pour mettre
sur une nouvelle ligne le nouveau mot
- mettre [etat] a [DEDANS] initialement
Code: 

- #include <stdio.h>
-
- #define DEDANS 1 /*dans un mot*/
- #define DEHORS 0 /*à l'extérieur d'un mot*/
-
- main()
- {
- int c, etat;
- // etat = DEHORS; // deuxieme fix
- etat = DEDANS; // deuxieme fix
-
- while((c = getchar()) != EOF)
- {
- // putchar(c); // premier fix
- if (c == '\n' || c == ' ' || c == '\t')
- etat = DEHORS;
- else if (etat == DEHORS) {
- etat = DEDANS;
- printf("\n");
- }
- putchar(c); // premier fix
- }
- }
Bien cordialement.