> Tous les forumsAutres langages

 langage C: recherche dans un fichier
Statut du sujet : NON RESOLU Imprimer
 tonguim
  Posté le 07/04/2006 @ 15:49  
 Petit astucien

116 Messages
Bonjour, je suis en train de realiser un programme de "gestion des Comptes Bancaires" en langage C; Dans le programme, j'ai une structure compte declarée comme une variable globale: [code]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 [/code] J'enregistre les donnees dans la structure compte dans un fichier. [code]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); } [/code] Je voudrais effectuer une recherche à partir du nomClient, ou à partir du numeroCpte, dans le fichier, et afficher l'enregistrement correspondant: [code]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"); }[/code] Mon programme ne marche pas; il n'ya pas d'erreur lors de la compilation. Comment faut il effectuer la recherche dans le fichier en question? Merci
 Afficher le profil de tonguimEnvoyer un message privé à tonguim
 
 
Publicité
 breizhbugs  Posté le 07/04/2006 à 16:15  
Astucien

3001 Messages
Salut, Dans ta fonction recherche, tu ouvres le fichier mais tu ne le lis pas !

Modifié par breizhbugs le 07/04/2006 16:17
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 tonguim  Posté le 07/04/2006 à 16:22  
Petit astucien

116 Messages
breizhbugs a écrit :tu ouvres le fichier mais tu ne le lis pas !
Comment puis je lire mon fichier s'il te plaît?
Afficher le profil de tonguimEnvoyer un message privé à tonguim
 Revenir en haut de la page
 breizhbugs  Posté le 07/04/2006 à 16:55  
Astucien

3001 Messages
tonguim a écrit : Comment puis je lire mon fichier s'il te plaît?
Le mieux est que tu lise un peu de documentation avant... http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_Stream_I.2f.O.asp
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 tonguim  Posté le 09/04/2006 à 12:47  
Petit astucien

116 Messages
J'ai refait la fonction rechercher ainsi: [code]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"); }[/code] Il n'ya pas d'erreurs C, mais le programme ne marche toujours pas; lorsque j'entre le nom que je cherche, et le numero du compte, le programme se 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.
Afficher le profil de tonguimEnvoyer un message privé à tonguim
 Revenir en haut de la page
 breizhbugs  Posté le 09/04/2006 à 13:08  
Astucien

3001 Messages
while (!EOF ... ->EOF est une constante, tu ne teste pas la fin du fichier avec cette condition.
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 bebe en detresse  Posté le 17/04/2006 à 14:24  
Petit astucien

40 Messages
une fonction qui permet la lecture/écriture : ofstream . exemple (ne pas oublier la librairie #include <fstream>) ofstream fichier; Fichier.open ("c:\\test.txt") /* l'adresse peut être contenue dans une variable */ Fichier >> "voici le texte qui sera dans le fichier ! \n"; Fichier.close () /* fermer le fichier */
Afficher le profil de bebe en detresseEnvoyer un message privé à bebe en detresse
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsAutres langages

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page