Langage C: recherche dans un fichier

Fermé
tonguim - Modifié le 9 août 2022 à 14:50
 brainniac1 - 5 févr. 2008 à 01:39

Bonjour,

Je suis en train de réaliser un programme de "gestion des comptes bancaires" en langage C;

Dans le programme, j'ai une structure "compte" déclarée globalement.
 

struct compte
{
       char numeroCpte [11]; //numero du compte
       char typeCompte [7]; //type du compte: cheque ou epargne
       char nomClient [50]; //nom du client
       char prenomClient [50]; //prenom(s) du client
       char statutClient [12]; //statut social du client: salarie ou non salarie
       char categorieCompte [13]; //categorie du compte: particulier ou professionnel
       char numeroClient [11]; //numero du client
       char dateCreation [10]; //date de creation du compte
};

struct compte cpt; // declaration d'une variable cpt de type compte


J'enregistre les données dans la structure compte dans un fichier.

void EnregDansFichier ()
{
     char nomFichier [26]; //nom du fichier dans lequel il faut sauvegarder
     int erreur;
     int i;
     FILE *sortie;

     printf("Entrez le nom du fichier: ");
     scanf("%s",&nomFichier);
  
       sortie=fopen(nomFichier,"at");
 
       if (sortie == NULL)
       {
            printf("Un probleme est survenue lors de la tentative d'enregistrement de vos donnees dans le fichier %s\n",nomFichier);
       }
       else
       {
            fprintf(sortie,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n", cpt.numeroCpte, cpt.typeCompte, cpt.nomClient, cpt.prenomClient, cpt.statutClient, cpt.categorieCompte, cpt.numeroClient, cpt.dateCreation);
       } 
       fclose(sortie);
}


Je voudrais effectuer une recherche à partir du nomClient, ou à partir du numeroCpte, dans le fichier, et afficher l'enregistrement correspondant:

void RechercheCpte ()
{
     char numeroCpte [11];
     char nomClient [50];
     char nomFichier [26];
     int trouve1, trouve2=0;
     FILE *sortie;
     
     printf ("Entrez le nom du fichier: "); scanf ("%s", nomFichier);
     sortie=fopen(nomFichier, "rt");
     
     printf ("\n\n\nEntrez le nom du client, ou le numero de compte que vous cherchez");
     printf ("\n\n\nNumero compte: "); scanf ("%s", numeroCpte);
     printf ("\n\n\nNom client: "); scanf ("%s", nomClient);
              
     while (!EOF) // tant que la fin du fichier n'est pas atteint
     {
         if (numeroCpte) // si un numero de compte a ete saisi
         {
             if (nomClient) // si un numero de compte et un nom de client ont ete saisi
             {
                trouve1=(strcmp(nomClient, cpt.nomClient));
             }
             else // si un numero de compte a ete saisi, mais pas de nom client
             {
                 trouve2=(strcmp(numeroCpte, cpt.numeroCpte));
             }
         }
         else // si aucun numero de compte n'a ete saisi
         {
             if (nomClient) // si aucun numero de compte n'a ete saisi, mais qu'un numero de client a ete saisie
             {
                trouve1=(strcmp(nomClient, cpt.nomClient));
             }
         }
     } // fin du while
    
    if (trouve1)
    {
         fscanf(sortie,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);
    }    
    system ("pause");
}


Mon programme ne marche pas. Il n'y a pas d'erreur lors de la compilation. Comment faut-il effectuer la recherche dans le fichier en question ?

Merci

6 réponses

Merci Kiruasam pour ton aide.

J'ai refait la fonction rechercher ainsi:

void RechercheCpte ()
{
     char numeroCpte [11];
     char nomClient [50];
     char nomFichier [26];
     int trouve1, trouve2=0;
     FILE *sortie;
     
     printf ("Entrez le nom du fichier: "); scanf ("%s", nomFichier);
     sortie=fopen(nomFichier, "rt");
     
     printf ("\n\n\nEntrez le nom du client, ou le numero de compte que vous cherchez");
     printf ("\n\n\nNumero compte: "); scanf ("%s", numeroCpte);
     printf ("\n\n\nNom client: "); scanf ("%s", nomClient);
              
     while (!EOF || !trouve1 || !trouve2) // tant que la fin du fichier n'est pas atteint
     {
         if (numeroCpte) // si un numero de compte a ete saisi
         {
             if (nomClient) // si un numero de compte et un nom de client ont ete saisi
             {
                trouve1=(strcmp(nomClient, cpt.nomClient));
             }
             else // si un numero de compte a ete saisi, mais pas de nom client
             {
                 trouve2=(strcmp(numeroCpte, cpt.numeroCpte));
             }
         }
         else // si aucun numero de compte n'a ete saisi
         {
             if (nomClient) // si aucun numero de compte n'a ete saisi, mais qu'un numero de client a ete saisie
             {
                trouve1=(strcmp(nomClient, cpt.nomClient));
             }
         } // fin du if
         
         fscanf(sortie,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);              
         
     } // fin du while
    
     fscanf(sortie,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);
 
    system ("pause");
}


Il n'y a pas d'erreurs C, mais le programme ne marche toujours pas. Lorsque j'entre le nom que je cherche, et le numéro du compte, le programme plante. J'appuie sur la touche "entrée", mais il ne sort pas du while apparemment.
J'ai vraiment besoin, car ça fait plusieurs jours déjà que je suis bloqué à ce niveau.

4