Bonjour à tous,
Je suis en train de faire un petit programme qui reorganise un fichiers (tabulation, commentaire ... etc).
J'ai un fichier comme ça :
Et je voudrais ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <stdio.h> /* Ce programme C ne fait pas grand chose */ void main() { int n; char c; c = getchar(); /* on lit un caractere */ /* sur stdin */ if (c==' ') { n++;putchar(c);} else /* sinon, on ne fait rien */ { ;} }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <stdio.h> /* Ce programme C ne fait pas grand chose */ void main() { int n; char c; c = getchar(); /* on lit un caractere */ /* sur stdin */ if (c==' ') { n++;putchar(c);} else /* sinon, on ne fait rien */ { ;} }
Or je ne comprends pas pourquoi au moment du retour à la ligne il ne reste pas dans l'etat ETAT_ACC puisque le retour à la ligne c'est bien un '\n'.
Donc je me dis que ca peu venir d'un problème de buffer. J'ai donc rajouter un fflush(stdin) à la fin.
Enfin je sais pas trop.
Voila ce que ca me donne :
Et voilà mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <stdio.h> /* Ce programme C ne fait pas grand chose */ void main() { int n; char c; c = getchar(); /* on lit un caractere */ /* sur stdin */ if (c==' ') { n++;putchar(c);} else /* sinon, on ne fait rien */ { ;} }
Merci de votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 #include <stdio.h> #include <stdlib.h> int main() { int c; enum {ETAT_DBT_LIGNE, ETAT_NORMAL, ETAT_ACC} etat = ETAT_DBT_LIGNE; while ((c=getchar()) != EOF) { switch (etat) { case ETAT_DBT_LIGNE: switch (c) { case ' ': case '\t': break; case '\n': putchar(c); break; case '{': putchar(c); etat = ETAT_ACC; break; default: putchar(c); etat = ETAT_NORMAL; break; } break; case ETAT_NORMAL: switch (c) { case '\n': putchar(c); etat = ETAT_DBT_LIGNE; break; default : break; } case ETAT_ACC: switch (c) { case '\n': putchar('\t'); break; case '}': putchar(c); etat = ETAT_DBT_LIGNE; break; default : putchar(c); break; } } fflush(stdin); } exit(EXIT_SUCCESS); }
François
Partager