Bonsoir ,
Soit un fichier « mots.txt » contenant des mots, écrire un programme qui permet de trouver les palindromes, de les écrire dans un autre fichier « palindrome.txt » et d’afficher leur nombre.
J'ai écrit un programme pour cet exercice mais l'exécution bloque comme l'indique cette image
Pourriez vous m'aider à trouver le problème s'il vous plait et merci .
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 #include <stdio.h> #include <stdlib.h> int nombre(FILE *f1)// retourne le nombre de mots dans un fichier { int a=0; int b=0; int i=0; do { a=fgetc(f1); b=fgetc(f1); fseek(f1,-1,SEEK_CUR); if(((a == ' ')||(a == '\n'))&&(b!=' ')&&(b!='\n')) { i++; } }while(b!=EOF); i++; return i; } int palindrome(int n,char ch[n])//retourne 1 si le mot est palindrome 0 sinon { int a=1; for (int i=0;i<(n/2);i++) { if (ch[i]!=ch[n-i-1]) { a=0; } } return a; } int main() { int c=0; FILE *f1=NULL; FILE *f2=NULL; f1=fopen("mots.txt","r"); f2=fopen("palindrome.txt","a"); if ((f1==NULL)||(f2==NULL)) { printf("erreur d'ouverture"); } else { do { int j=0; do //cette boucle permet de déterminer la longeur de chaqu'un des mots du fichier { c=fgetc(f1); j++; }while ((c!=' ')||(c!='\n')); fseek(f1,-j,SEEK_CUR);//Pour faire retourner le cursor vers le début du mot qui précede le 1er espace ou retour à la ligne rencontré. char *T=malloc(j*sizeof(char)); for(int i=0;i<j;i++)//mettre le mot trouvé dans un tableau et remettre le cursor à la position avec laquelle il a quitté la boucle do { T[i]=fgetc(f1); } if(palindrome(j,T)==1)// vérifier si le mot est palindrome et le mettre dans f2 si c'est le cas { fputs(T,f2); } }while (c!=EOF); printf("Le nombre des mots palindromes est %d \n :",nombre(f2)); } fclose(f1); fclose(f2); }
Partager