Probleme de lecture dans un fichier en c

Fermé
ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 - 24 avril 2005 à 19:16
ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 - 24 avril 2005 à 20:18
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
A voir également:

3 réponses

ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 80
24 avril 2005 à 19:57
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
0
Que dis la doc ??
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...
0
ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 80
24 avril 2005 à 20:18
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 !!
0