Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1309 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Fichiers & structures & String - Fonction de recherche

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fichiers & structures & String - Fonction de recherche

n°2135816
bhah1
Posté le 11-04-2012 à 22:07:10  profilanswer
 

Hello :)
Je souhaite savoir comment mettre en place une fonction de recherche d'une chaîne de caractères (String) dans un fichier. Sachant que cette chaîne fait partie d'une structure.

 

Je m'explique. J'ai le code suivant qui me permet de remplir un fichier de villes desservies. Pour ne pas trop alourdir mon post, je laisse de côté le bout de code pour vérifier que le fichier existe

 
Code :
  1. FILE *entree;
  2. struct desserte {
  3.  char ville[40];
  4.  char gare[40];
  5.  };
  6. struct desserte escale;
  7. strcpy(escale.ville, "1" );
  8. entree = fopen("liste_villes", "a" );
  9. while(strcmp(escale.ville,"ZZ" ) != 0)
  10. {
  11.  printf("Entrer une ville en majuscules (ZZ pour terminer): " );
  12.  scanf("%s", escale.ville);
  13.  if(strcmp(escale.ville,"ZZ" ) != 0)
  14.  {
  15.  fprintf(entree, "%s\n", escale.ville);
  16.  printf("Entrer la gare correspondante en majuscules: " );
  17.  scanf("%s", escale.gare);
  18.  fprintf(entree, "%s\n", escale.gare);
  19.  }
  20. }
  21. fclose(entree);
  22. }


Je souhaite mettre en place un programme qui permet de saisir l'ensemble des trains desservant une gare à un moment donné.

 
Code :
  1. int verifgare();
  2. main()
  3. {
  4. struct train {
  5.                 int num_train;
  6.                 char gare_dep[30];
  7.                 // Je n'ai pas mis tous les champs pour simplifier
  8.                 };
  9. struct train voyage;
  10. int resultat;
  11. FILE *f1;
  12. f1 = fopen("liste_vols", "a" );
  13.         voyage.num_train = -1; 
  14.         while(voyage.num_vol != 0)
  15.         {
  16.              printf("Entrer un numéro de train (0 pour arrêter la saisie) : " );
  17.              scanf("%d", &voyage.num_train);
  18.  
  19.              if(voyage.num_train != 0)
  20.              {
  21.                   printf("Saisir la ville de départ : " );
  22.                   scanf("%s", voyage.gare_dep);
  23.                   resultat = verifgare(voyage.gare_dep); 
  24.                   if (resultat == 0)
  25.                   {
  26.                  printf("La gare saisie n'est pas valide.\n" );
  27.                         fclose(entree);
  28.                   }
  29.                   else
  30.                  {
  31.                         // On sauvegarde dans le fichier.
  32.                         fprintf(f1, "%d %s\n", voyage.num_train, voyage.gare_dep);
  33.                  }
  34.             }
  35.         }
  36. fclose(f1);
  37. }
  38. int verifgare(char gare[30])
  39. {
  40.   FILE *f2;
  41.   f2= fopen("liste_villes","r" );
  42.   int trouve = 0;
  43.   char temp[30] ; // Ligne lue dans fichier liste_villes
  44.   strcpy(temp, "" );
  45.   while (!EOF && trouve == 0)
  46.    {
  47.    fgets(temp, 29, f2);
  48.    if((strcmp(temp, gare)) == 0)
  49.    {
  50.     trouve = 1;
  51.     return 1;
  52.    }
  53.   }
  54.   return 0;
  55.           fclose(f2);
  56. }
 

ça ne marche pas. J'obtiens toujours le message "La gare saisie n'est pas valide" bien que je saisie des gares renseignées dans le fichier.

 

Pouvez-vous m'aider s'il vous plaît :-( ?


Message édité par bhah1 le 12-04-2012 à 09:36:44
mood
Publicité
Posté le 11-04-2012 à 22:07:10  profilanswer
 

n°2135838
breizhbugs
Posté le 11-04-2012 à 23:37:29  profilanswer
 

ligne 65: aero?
Sinon ton code est très mauvais...
Tu devrais reprendre les cours du début...


---------------
Seul Google le sait...
n°2135869
bhah1
Posté le 12-04-2012 à 09:23:03  profilanswer
 

Alors si tu veux, ta réponse n'est pas très constructive...
Si j'ai posté sur le forum, c'est justement pour demander de l'aide et apprendre de mes erreurs.
Ceci dit, bien vu, c'est gare et non pas aero à la ligne 65 :).

n°2136534
__werz
Posté le 14-04-2012 à 11:54:31  profilanswer
 

Le principal problème est dans ta fonction verifgare, ligne 56: !EOF vaut toujours zéro, tu ne rentre donc jamais dans ta boucle.
 
Tu auras ensuite deux autres problèmes:
 
1. La chaine obtenue après fgets est terminée par un saut de ligne -> tu auras donc "PARIS\n" et "PARIS" et le strcmp ne pourra pas fonctionner
2. Tu ne vérifies pas le retour de fgets. Tu devrais sortir de la boucle et retourner 0 si fgets renvoie NULL (même si usuellement, en C on renvoit 0 si tout s'est bien passé et -1 ou une autre valeur négative en cas d'échec).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Fichiers & structures & String - Fonction de recherche

 

Sujets relatifs
recherche en vbsCompression/Décompression de gros fichiers
[Résolu] Aide programmation recherche propriétés lnk en vbsRetour fonction C
double incrémentation dans une fonction JavaScript[résolu]perte de mon css en passant dans une fonction javascript
Impression de fichiers PDFFonction qui retourne un tableau dynamique
comment au mieux effectuer une recherche dans un fichier XML? 
Plus de sujets relatifs à : Fichiers & structures & String - Fonction de recherche


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR