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
Nom : Sans titre.png
Affichages : 960
Taille : 116,6 Ko
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);
 
}