La fonction fscanf ou fgets

Résolu
Pierre_Marie Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut toute la communauté !
Une preoccupation de plus. j'ai creé un fichier en langage c dans lequel jai rangé plusieurs infos suivant cet ordre.

Nom:prenom:naiss:email:password

maintenant je me demande comment recuperer dans le fichier uniquement l'email. Jai trouvé une solution avec la fonction fgetc mais jaimerais pas l'utiliser car elle me fait trop de lignes. je désire donc le faire avec la fonction fscanf ou soit la fonction fgets. Svp quelqu'un aurait une solution à me proposer?

Cordialement,

1 réponse

paly2 Messages postés 254 Date d'inscription   Statut Membre Dernière intervention   25
 
Un exemple de code avec fgets:
#include <stdio.h>
#include <string.h> // Ne pas oublier string.h pour strtok !

int main(void) {
 FILE* file = fopen("fichier", "r"); // On ouvre le fichier
 
 char ligne[1000] = "";
 char* email = NULL;
 int i;
 
 fgets(ligne, 1000, file); // On récupère la ligne (ici ça sera la première, vu que c'est la première fois qu'on lit dans le fichier)
 
 strtok(ligne, ":"); // strtok retourne un pointeur sur le premier champ ...
 strtok(NULL, ":"); // ... puis sur le deuxième ...
 strtok(NULL, ":"); // ... puis sur le troisième ...
 email = strtok(NULL, ":"); // ... et enfin sur le quatrième (l'email).
 // Note: strtok a modifié la chaîne de caractère ligne. On ne peut plus l'utiliser.
 
 puts(email); // Affichage de l'e-mail
 
 fclose(file); // On ferme le fichier
}



C'est un code minimal, n'oublie pas de faire des vérifications pour les erreurs (retour de fopen, fgets et strtok notamment).

La curiosité est une excellente qualité !
0
Pierre_Marie Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ta reponse. Mais je ne comprends pas quelquechose, pourquoi au niveau du second strtok, il n'y a plus ligne mais plutot NULL? Pourrais tu m'expliquer brievement comment cette fonction agit sur les chaines de caractères? Merci d'avance.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Un peu de lecture de la doc : http://manpagesfr.free.fr/man/man3/strtok.3.html
1ère ligne :
La fonction strtok() scinde une chaîne en une séquence d'éléments lexicaux. Lors du premier appel à strtok(), la chaîne à scinder doit être spécifiée dans str. Dans chaque appel ultérieur fait pour analyser la même chaîne, str doit être NULL.
0