Langage C

Fermé
aderiano Messages postés 6 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009 - 21 janv. 2009 à 23:21
aderiano Messages postés 6 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009 - 21 janv. 2009 à 23:42
SVP je veux savoir la fonction qui peut lire d'un fichier en tenant compte des espaces, je vais passer des informations d'un fichier vers une structure, j'ai utilisé la fonction sscanf mais lorsqu'elle trouve un espace elle affecte ce que le suit au champs suivant de la structure et ça fait un décalage de données dans la structure !!!
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
21 janv. 2009 à 23:30
Salut,
Si j'ai bien compris ton problème, tu as besoin de fgets(). Ca prend tous les espaces jusqu'à la fin de la ligne tant que le nombre de caractères lus est inférieur à la taille du buffer.
0
aderiano Messages postés 6 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009
21 janv. 2009 à 23:42
Merci ,mais j'ai un fichier qui contient des lignes de données chaque ligne contient les informations suivante:
login mot de passe nom prenom email pseudo
certains champs contiennent des espaces exp: nom composé,
j'ai pris les ligne via fgets et je veux la décompose suivant le nombre de char de chaque champs la fonction que j'ai utilisé est:
liste *charge_user(liste *l)
{


cellule *ptc;
char s[111];

FILE *f;

f=fopen("user.txt","r");
l=(liste*)malloc(sizeof(liste));
l->ptd=NULL;
l->ptf=NULL;




while ( fgets(s,110,f))
{


ptc=(cellule*)malloc(sizeof(cellule));
ptc->pts=NULL;
ptc->ptp=NULL;

sscanf(s,"%20s %10s %20s %20s %30s %10s",ptc->login,ptc->mot_passe,ptc->nom,ptc->prenom,ptc->email,ptc->pseudo);


if(l->ptd==NULL)
{
l->ptd=ptc;
l->ptf=ptc;
}
else
{
l->ptf->pts=ptc;
ptc->ptp=l->ptf;
l->ptf=ptc;
}

};
return (l);
fclose (f);
}
si le nom est composé alors il affecte la deuxieme partie pour le champs suivant dans la structure
0