Se connecter / S'enregistrer
Votre question

Probleme de recherche dans un fichiers en langage C

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
12 Décembre 2006 17:07:23

Bonjour tout le monde!

j'ai un probleme pour finir un exercice en langage C sur les fichiers.J'arrive pas a faire le choix 3 et le choix 4.Voila l'enoncé de l'exercice :

Ecrire une fonction "saisie" permettant de rentrer un numero, un nom et un prenom.Ecrire ensuite une fonction "affiche" affichant le numero de matricule, le nom et le prenom à l'ecran. Ecrire un programme structuré sous forme de menu proposant les options suivantes :
1 : creation du fichier dt le nom sera entré au clavier.
2 : addition à la fin du fichier d'un nombre d'elements.
3 : recherche à travers le fichier et affichage du matricule, nom et prenom pour tos les elements du fichier correspondant au nom saisi au clavier.
4 : affichage des caracteristiques (matricule, nom, prenom) pour le premier element du fichier dont le nom correspond à celui entré.

Si vous pouvez m'aider ce serait sympa je bloque vraiment là et j'ai mon exam mardi :) 

Merci beaucoup.

voila le debut du programme que j'ai deja fait :

#include<stdio.h>


void saisie(char nom[50],char prenom[50],int *mat)
{
printf("Entrez le matricule : ");
scanf("%d",mat);

printf("Entrez le nom du comdamné a mort : ");
scanf("%s",nom);

printf("Entrez le prenom du comdamné a mort : ");
scanf("%s",prenom);
}




void affiche(char nom[50],char prenom[50],int mat)
{
printf("le numero de matricule est : %d",mat);

printf("le nom du comdamné a mort est : %s \net son prenom est :
%s",nom,prenom);
}




int main()
{
int choix,nbr,nbr2,p,i;
char nomf[50];
char n1[50],n2[50];
char rechnom[50];

FILE *fp;


printf("Que voulez vous faire?\n");
printf("1. creation du fichier dont le nom sera entré au clavier\n");
printf("2. addition à la fin du fichier d'un nombre d'elements demandé
a l'utilisateur\n");
printf("3. recherche a travers le fichiers\n");
printf("4. affichage des caracteristiques pour le premier element du
fichier dont le nom correspond à celui entré\n");

scanf("%d",&choix);

switch(choix)
{
case 1 :
printf("entrez le nom du fichier : ");
scanf("%s",nomf);

fp=fopen(nomf,"w");

if (fp==0)
return -1;

printf("entrez le nombre d'enregistrements : ");
scanf("%d",&nbr);

for(i=0;i<nbr;i++)
{
saisie(n1,n2,&p);
fprintf(fp,"%s\t%s\t%d\n",n1,n2,p);
}

fclose(fp);

break;

case 2 :

printf("quel fichier voulez vous ouvrir : ");
scanf("%s",&nomf);


fp=fopen(nomf,"a");

if (fp==0)
{
printf("erreur ouverture fichier\n");
return -1;
}

printf("entrez le nombre d'enregistrements a ajouter : ");
scanf("%d",&nbr2);

for(i=0;i<nbr2;i++)
{
saisie(n1,n2,&p);
fprintf(fp,"%s\t%s\t%d\n",n1,n2,p);
}

fclose(fp);

break;


case 3 :

printf("quel fichier voulez vous ouvrir : ");
scanf("%s",&nomf);

printf("entrez le nom a rechercher :");
scanf("%s",&rechnom);

fp=fopen(nomf,"r");

break ;

case 4 :

break ;
}

return 0;
}

Autres pages sur : probleme recherche fichiers langage

12 Décembre 2006 18:32:38

pense aux balise code
Une petite fonction qui peut aider:
un_enr prend comme valeur 0 pour indiquer l'affichage de tout les elements et une valeur differente de 0 pour afficher que le premier.
je te laisse voir le manuel des fonctions que tu connais pas
  1. void rechercher (FILE *fp, char *nom, int un_enr)
  2. {
  3. int nombre_afficher = 0;
  4. char nom_lu[50], prenom_lu[50];
  5. int matricule_lu;
  6. if (fp == NULL) return;
  7. rewind (fp);
  8. while (!feof (fp))
  9. {
  10. if (fscanf (fp, "%s\t%s\t%d\n", nom_lu, prenom_lu, &matricule_lu) != 3)
  11. return;
  12. if (strcmp (nom_lu, nom) == 0)
  13. {
  14. nombre_afficher++;
  15. affiche (nom_lu, prenom_lu, matricule_lu);
  16. }
  17. if (un_enr && !nombre_afficher)
  18. break;
  19. }
  20. }

il peut y avoir des erreurs, c'est fait vite fait.
d'ailleurs y a plein de depassement de buffer qui peuvent se produire dans ton programme.
mais bon comme c'est un exercice (pour débuter)
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS