Probleme de lecture dans un fichier en c
ollie314
Messages postés
145
Date d'inscription
Statut
Membre
Dernière intervention
-
ollie314 Messages postés 145 Date d'inscription Statut Membre Dernière intervention -
ollie314 Messages postés 145 Date d'inscription Statut Membre Dernière intervention -
Bonjour...
Voilà j'ai un probleme de lecture dans un fichier texte en C.
le but est de stocker les uilisateurs enregistrés dans un fichier texte de la forme:
login1\n
pass1\n
......
j'ai donc fais un tite fonction que voici ( c'est un peu scabreux mais dans u fichier texte je ne savais pas comment faire...)
int user_existe(membre mbr)
{
FILE *auth;
char ligne[30];
int existe=0;
auth=fopen(agenda_login,"r");
if(auth!=NULL)
{
// le fichier agenda_login est indente de la maniere suivante
// login1\n
// mdp1\n
// .....
//loginn\n
//mdpn\n
while(fgets(ligne,sizeof(ligne),auth)&&existe==0)
{
if(strcmp(mbr.login,ligne)==0)
{
fgets(ligne,sizeof(ligne),auth);
if(strcmp(mbr.mdp,ligne)==0)
{
//le login et le pass sont identique..
existe=1;
}
}
else
{
fgets(ligne,sizeof(ligne),auth);
}
}
}
fclose(auth);
return existe;
}
sachant que la structure membre est definie comme suit....
#ifndef _STRUCTMBR_H
#define _STRUCTMBR_H
typedef struct
{
char login[30];
char mdp[30];
}membre;
extern membre mbr;
extern int user_existe(membre mbr);
extern int inscr_membre(membre mbr);
extern int supr_membre(membre mbr);
#endif
quelqu'un peu me dire pourquoi ça ne marce pas ??
d'avance merci...
ollie 314
Voilà j'ai un probleme de lecture dans un fichier texte en C.
le but est de stocker les uilisateurs enregistrés dans un fichier texte de la forme:
login1\n
pass1\n
......
j'ai donc fais un tite fonction que voici ( c'est un peu scabreux mais dans u fichier texte je ne savais pas comment faire...)
int user_existe(membre mbr)
{
FILE *auth;
char ligne[30];
int existe=0;
auth=fopen(agenda_login,"r");
if(auth!=NULL)
{
// le fichier agenda_login est indente de la maniere suivante
// login1\n
// mdp1\n
// .....
//loginn\n
//mdpn\n
while(fgets(ligne,sizeof(ligne),auth)&&existe==0)
{
if(strcmp(mbr.login,ligne)==0)
{
fgets(ligne,sizeof(ligne),auth);
if(strcmp(mbr.mdp,ligne)==0)
{
//le login et le pass sont identique..
existe=1;
}
}
else
{
fgets(ligne,sizeof(ligne),auth);
}
}
}
fclose(auth);
return existe;
}
sachant que la structure membre est definie comme suit....
#ifndef _STRUCTMBR_H
#define _STRUCTMBR_H
typedef struct
{
char login[30];
char mdp[30];
}membre;
extern membre mbr;
extern int user_existe(membre mbr);
extern int inscr_membre(membre mbr);
extern int supr_membre(membre mbr);
#endif
quelqu'un peu me dire pourquoi ça ne marce pas ??
d'avance merci...
ollie 314
A voir également:
- Probleme de lecture 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
3 réponses
je vens de faire un chtite modif en fait
voici ...
while(fgets(ligne,sizeof(ligne),auth)&&existe==0)
{
if(strcmp(mbr.login,ligne)==0)
{
fgets(ligne,sizeof(ligne),auth);
if(strcmp(mbr.mdp,ligne)==0)
{
//le login et le pass sont identique..
existe=1;
}
}
else
{
//fgets(ligne,sizeof(ligne),auth); pas besoin de cette ligne c'etait //pour sauter une ligne dans le fichier
}
}
}
..
mais ça change rien
voici ...
while(fgets(ligne,sizeof(ligne),auth)&&existe==0)
{
if(strcmp(mbr.login,ligne)==0)
{
fgets(ligne,sizeof(ligne),auth);
if(strcmp(mbr.mdp,ligne)==0)
{
//le login et le pass sont identique..
existe=1;
}
}
else
{
//fgets(ligne,sizeof(ligne),auth); pas besoin de cette ligne c'etait //pour sauter une ligne dans le fichier
}
}
}
..
mais ça change rien
Que dis la doc ??
Je suis quasiment convaincu qu'il n'y a pourtant pas de '\n' dans mbr.login ou mbr.mpd, donc strcmp() foire.
Par contre ta modif est fausse (si tu fait ça, tu décale les comparaison, i.e. tu compare les mots de passe du fichier avec le login de la structure mbr.Bref, pas beau...
fgets() lit au plus size - 1 caractères depuis stream et les place dans le buffer pointé par s. La lecture s'arrête après EOF ou un retour- chariot. Si un retour-chariot (newline) est lu, il est placé dans le buffer. Un caractère nul '\0' est placé à la fin de la ligne.
Je suis quasiment convaincu qu'il n'y a pourtant pas de '\n' dans mbr.login ou mbr.mpd, donc strcmp() foire.
Par contre ta modif est fausse (si tu fait ça, tu décale les comparaison, i.e. tu compare les mots de passe du fichier avec le login de la structure mbr.Bref, pas beau...
merci pour ta reponse, je ne suis pas sûr de comprendre....
voila la function d'inscription
int inscr_membre(membre mbr)
{
FILE *auth;
if(user_existe(mbr)==1)
{
return 0;
}
else
{
auth=fopen(agenda_login,"a");
if(auth !=NULL)
{
fprintf(auth,"%s\n",mbr.login);
fprintf(auth,"%s\n",mbr.mdp);
return 1;
}
else
{
return 0;
}
}
fclose(auth);
}
1 si ok 0 sinon;
pour saisir mr.login par exemple je fais..
scanf("%s",mbr.login);
donc normalement il ne devrait pas y avoir de \n superflu ( a moins que le scanf n'en induise un mais mes tests et mes lectures m'ont prouvé le contraire.... c'est louche..
pour la modif, c'est bon en fait j'avais pas vu les deux "}"
encore merci !!
voila la function d'inscription
int inscr_membre(membre mbr)
{
FILE *auth;
if(user_existe(mbr)==1)
{
return 0;
}
else
{
auth=fopen(agenda_login,"a");
if(auth !=NULL)
{
fprintf(auth,"%s\n",mbr.login);
fprintf(auth,"%s\n",mbr.mdp);
return 1;
}
else
{
return 0;
}
}
fclose(auth);
}
1 si ok 0 sinon;
pour saisir mr.login par exemple je fais..
scanf("%s",mbr.login);
donc normalement il ne devrait pas y avoir de \n superflu ( a moins que le scanf n'en induise un mais mes tests et mes lectures m'ont prouvé le contraire.... c'est louche..
pour la modif, c'est bon en fait j'avais pas vu les deux "}"
encore merci !!