Bonjour, j'ai besoin d'aide pour débugger un petit programme que j'ai écris en langage c. Je pense que le problème est lié à une méconnaissance de la fonction "gets". Le but du code est de compter le nombre de lettre d'un texte écris sur plusieurs lignes. Pour connaître le nombre de lettre effectivement tapez en entrée il faut appuyer sur la touche "Entrée" 2 fois. Le programme doit compter les lettres de l'alphabet et les espace seulement. Le caractère nul '\0' et saut de ligne '\n' ne doivent pas être pris en compte.
Exemple: si je tape sur une première ligne la chaine suivante : "azerty azerty" puis que je tape la touche "Entrée"
Sur une seconde ligne j'écris la chaîne suivante "ytreza ytreza" puis que je tape sur la touche "Entrée" 2 fois pour que le programme finisse et me donne le résultat du nombre de lettre du texte tapé.
Toutes les lettres on été compté 4 fois sauf le "y" qui lui est compté 3 fois. Si je fait un autre exemple sur 10 lignes, je m'aperçois que mon programme ne compte jamais le premier caractère d'une nouvelle ligne.
Voici le programme:
Si quelques bonnes âmes pouvaient m'expliquer l'erreur. Je tourne autour du programme depuis un bon moment, j'ai essayé différentes choses mais sans résultat.
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 #include <stdio.h> #define LGMAX 127 int main() { char ascii[26], ligne[LGMAX+1]; int nb[26], i, j, autre = 0, comptelettre = 0, espion = 0, nbcarac=0; for(i=0; i<26; i++) nb[i] = 0; for(i=0; i<LGMAX; i++) ligne[i] = '#'; for(i=0; i<26; i++) ascii[i] = i + 97; printf("Donnez votre texte, en terminant par une ligne vide : \n"); i = j = autre = 0; do { nbcarac=0; gets(ligne); printf("\n"); putchar('\n'); printf("\n"); for (i=0;i<127 && ligne[i] != '\0';i++) nbcarac+=1;; printf("le nombre de caractere est : %d \nle 1ere lettre est %c\n", nbcarac, ligne[0]); for (i=0; i<127 /*&& ligne[i] != '\0' */&& ligne[i] != '\n'; i++) { if (ligne[i] > 96 && ligne[i] < 123) {comptelettre += 1;espion+=1;} if ((ligne[i] < 97) || (ligne[i] > 122 && ligne[0] != '\n')) {autre += 1; espion += 1;continue;} for(j=0; j<26 && ligne[i] != '\0' && ligne[i] != '\n'; j++) if (ligne[i] == ascii[j]) {nb[j] += 1;} } } while(getchar() != '\n'); printf("Votre texte comporte %d caracteres dont : \n", comptelettre); for(i=0; i<26; i++) printf("%d fois la lettre %c\n", nb[i], ascii[i]); printf("\net %d autres caracteres\n", autre); printf("\n\n"); return 0; }
Merci.
Partager