Recherche dans un fichier en C
metnet
-
metnet -
metnet -
Bonjour,
En fait j'ai un souci au niveau de ma fonction de recherche dans un fichier qui contient des noms( sam, real2 etc..) que j'ai déja crée.
J'arrive pas à avoir Recherche Ok meme si je rentre un nom existant.
Merçi de m'aider svp
voici le code en C
#include<stdio.h>
#include<string.h>
typedef struct { //Déclaration structure film
char titre[80];
int idfilm;
int idreal;
}film;
typedef struct { //Déclaration structure Réalisateur
char nom[40];
int idreal;
}personne;
typedef struct { //Déclaration structure acteur
char nomacteur[40];
int idacteur;
}acteur;
int recherche(char nomderecherche)
{
personne p;
film f;
acteur a;
char nomdonne;
int test=1;
FILE *fic1= NULL;
fic1=fopen("fichier.txt","r");
if (fic1 != NULL)
/* while(!feof(fic1)&&(test==0))
{
fread(&p, sizeof(p), 1, fic1);
if(!strcmp(p.nom,"nomdonne"))*/
do
{
fread(&p, sizeof(p), 1, fic1);
test=(strcmp(p.nom,"nomdonne"));
fclose(fic1);
return(test);
}while(!feof(fic1)||(test==1));
}
/*else
printf("Impossible d'ouvrir le fichier fichier.txt");
} */
int main(){
personne p;
film f;
acteur a;
char nomdonne;
int test;
printf("Donner le nom du réalisateur recherché \n");
scanf("%s",&nomdonne);
test=recherche(nomdonne);
if(test==0)
printf("Recherche Ok\n");
else
printf("Recherche Non Ok!\n");
//printf("%d",recherche(nomdonne));
getchar();
getchar();
}
En fait j'ai un souci au niveau de ma fonction de recherche dans un fichier qui contient des noms( sam, real2 etc..) que j'ai déja crée.
J'arrive pas à avoir Recherche Ok meme si je rentre un nom existant.
Merçi de m'aider svp
voici le code en C
#include<stdio.h>
#include<string.h>
typedef struct { //Déclaration structure film
char titre[80];
int idfilm;
int idreal;
}film;
typedef struct { //Déclaration structure Réalisateur
char nom[40];
int idreal;
}personne;
typedef struct { //Déclaration structure acteur
char nomacteur[40];
int idacteur;
}acteur;
int recherche(char nomderecherche)
{
personne p;
film f;
acteur a;
char nomdonne;
int test=1;
FILE *fic1= NULL;
fic1=fopen("fichier.txt","r");
if (fic1 != NULL)
/* while(!feof(fic1)&&(test==0))
{
fread(&p, sizeof(p), 1, fic1);
if(!strcmp(p.nom,"nomdonne"))*/
do
{
fread(&p, sizeof(p), 1, fic1);
test=(strcmp(p.nom,"nomdonne"));
fclose(fic1);
return(test);
}while(!feof(fic1)||(test==1));
}
/*else
printf("Impossible d'ouvrir le fichier fichier.txt");
} */
int main(){
personne p;
film f;
acteur a;
char nomdonne;
int test;
printf("Donner le nom du réalisateur recherché \n");
scanf("%s",&nomdonne);
test=recherche(nomdonne);
if(test==0)
printf("Recherche Ok\n");
else
printf("Recherche Non Ok!\n");
//printf("%d",recherche(nomdonne));
getchar();
getchar();
}
A voir également:
- Recherche dans un fichier en C
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
1 réponse
salut,
premièrement lorsque tu postes du code dans ce forum utilise les balises code
au lieu d'avoir
comme ceci
ça permet de mieux mettre en forme
ton texte
ensuite,
enlevons les commentaires (des essais ? )
de ta fonction, ça donne :
je dois dire que je ne comprends pas ce que tu fais.
tout d'bord, "nomdonne" c'est pas censé être une variable ?
que tu devrais remplir avec ce qui est passé en argument ?
ensuite, quoiqu'il arrive tu lis un truc, et même si ce n'est pas ce que tu cherches tu fermes le fichier immédiatement et tu renvoies le résultat... résultat tu termine ta fonction immédiatement après avoir lu le premier truc qu'il y a dans ton fichier, sans faire le reste de ta boucle.
ensuite, la manière dont tu procèdes dépend fortement de comment tu as mis tes données dans ton fichier.
si tu utilises fread() avec ta structure, il faudrait en théorie que tu ais utilisé fwrite() avec ta structure pour l'avoir enregistré dedans au préalable. c'est le cas ?
premièrement lorsque tu postes du code dans ce forum utilise les balises code
comme ceci ça permet de mieux mettre en forme ton texte
au lieu d'avoir
comme ceci
ça permet de mieux mettre en forme
ton texte
ensuite,
enlevons les commentaires (des essais ? )
de ta fonction, ça donne :
int recherche(char nomderecherche) { personne p; film f; acteur a; char nomdonne; int test=1; FILE *fic1= NULL; fic1=fopen("fichier.txt","r"); if (fic1 != NULL) do { fread(&p, sizeof(p), 1, fic1); test=(strcmp(p.nom,"nomdonne")); fclose(fic1); return(test); }while(!feof(fic1)||(test==1)); }
je dois dire que je ne comprends pas ce que tu fais.
tout d'bord, "nomdonne" c'est pas censé être une variable ?
que tu devrais remplir avec ce qui est passé en argument ?
ensuite, quoiqu'il arrive tu lis un truc, et même si ce n'est pas ce que tu cherches tu fermes le fichier immédiatement et tu renvoies le résultat... résultat tu termine ta fonction immédiatement après avoir lu le premier truc qu'il y a dans ton fichier, sans faire le reste de ta boucle.
ensuite, la manière dont tu procèdes dépend fortement de comment tu as mis tes données dans ton fichier.
si tu utilises fread() avec ta structure, il faudrait en théorie que tu ais utilisé fwrite() avec ta structure pour l'avoir enregistré dedans au préalable. c'est le cas ?
et sinon, effectivement...