IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Fichiers & structures & String - Fonction de recherche


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Par défaut Fichiers & structures & String - Fonction de recherche
    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 châine 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 allourdir mon post, je laisse de côté le bout de code pr vérifier que le fichier existe

    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
     
    FILE *entree;
    struct desserte {
    		     char ville[40];
    		     char gare[40];
    		     };
     
    struct desserte escale;
     
    strcpy(escale.ville, "1"); 
     
    entree = fopen("liste_villes", "a");
     
    	while(strcmp(escale.ville,"ZZ") != 0)
    	{
    		printf("Entrer une ville en majuscules (ZZ pour terminer): ");
    		scanf("%s", escale.ville);
     
    		if(strcmp(escale.ville,"ZZ") != 0)
    		{
    		fprintf(entree, "%s\n", escale.ville);
     
    		printf("Entrer la gare correspondante en majuscules: ");
    		scanf("%s", escale.gare);
    		fprintf(entree, "%s\n", escale.gare);
    		}
    	}
    fclose(entree);
    }
    Je souhaite mettre en place un programme qui permet de saisir l'ensemble des trains desservant une gare à un moment donné.

    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
     
    int verifgare();
     
    main()
    {
    struct train {
                    int num_train;
                    char gare_dep[30];
                    // Je n'ai pas mis tous les champs pour simplifier
                   };
     
    struct train voyage;
    int resultat;
     
    FILE *f1;
     
    f1 = fopen("liste_vols", "a");
     
            voyage.num_train = -1;  
            while(voyage.num_vol != 0)
            {
                  printf("Entrer un numéro de train (0 pour arrêter la saisie) : ");
                  scanf("%d", &voyage.num_train);
     
                  if(voyage.num_train != 0) 
                  {
                         printf("Saisir la ville de départ : "); 
                         scanf("%s", voyage.gare_dep);
     
                         resultat = verifgare(voyage.gare_dep);  
                         if (resultat == 0)
                         {
                    	   printf("La gare saisie n'est pas valide.\n");
                               fclose(entree);
                         }
                         else 
                        {
                               // On sauvegarde dans le fichier.
                               fprintf(f1, "%d %s\n", voyage.num_train, voyage.gare_dep);
                        }
                   }
              }
    fclose(f1);
    }
     
    int verifgare(char gare[30])
     
    {
      FILE *f2;
     
      f2= fopen("liste_villes","r");
      int trouve = 0;
      char temp[30] ; // Ligne lue dans fichier liste_villes
      strcpy(temp, "");
     
    	  while (!EOF && trouve == 0)
    	  {
    	  	fgets(temp, 29, f2);
     
    	  	if((strcmp(temp, gare)) == 0)
    	  	{
    	  		trouve = 1;
    	  		return 1;
    	  	} 
    	  }
    	  return 0;	 
              fclose(f2);
    }
    ç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 ?

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    En fait, pour savoir si tu as atteint la fin du fichier, tu ne peux pas tout simplement faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     while (!EOF && trouve == 0)
    parce que EOF est simplement une constante.
    Tu dois te servir soit :
    - de la valeur de retour de fgets () (cette fonction te retourne NULL quand elle n'a pas pu lire de texte, soit à cause d'une erreur, soit à cause de la fin du fichier).
    - de la fonction feof() qui te dit si tu as atteint la fin du fichier.

    Sur un autre sujet, évite ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int verifgare(char gare[30])
    On ne passe pas un tableau de caractères en paramètres. Généralement, on va plutot utiliser ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int verifgare(char *gare)

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Par défaut
    Citation Envoyé par phi1981 Voir le message
    En fait, pour savoir si tu as atteint la fin du fichier, tu ne peux pas tout simplement faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     while (!EOF && trouve == 0)
    parce que EOF est simplement une constante.
    Tu dois te servir soit :
    - de la valeur de retour de fgets () (cette fonction te retourne NULL quand elle n'a pas pu lire de texte, soit à cause d'une erreur, soit à cause de la fin du fichier).
    - de la fonction feof() qui te dit si tu as atteint la fin du fichier.

    Sur un autre sujet, évite ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int verifgare(char gare[30])
    On ne passe pas un tableau de caractères en paramètres. Généralement, on va plutot utiliser ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int verifgare(char *gare)
    Merci pour ta réponse

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Par défaut
    Code modifié en intégralité.
    Le sujet n'est plus d'actualité.
    Merci .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/12/2006, 12h34
  2. Recherche solution pour fichiers temporaires structurés
    Par RamDevTeam dans le forum Bases de données
    Réponses: 7
    Dernier message: 25/10/2005, 14h25
  3. [String] Fonction de recherche de caractères numériques
    Par david71 dans le forum Général Java
    Réponses: 10
    Dernier message: 16/02/2005, 12h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo