La fonction fscanf ou fgets

Résolu/Fermé
Pierre_Marie Messages postés 2 Date d'inscription mardi 31 mai 2016 Statut Membre Dernière intervention 31 mai 2016 - 31 mai 2016 à 03:30
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 31 mai 2016 à 21:57
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 vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
Modifié par paly2 le 31/05/2016 à 14:56
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 mardi 31 mai 2016 Statut Membre Dernière intervention 31 mai 2016
31 mai 2016 à 20:21
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
31 mai 2016 à 21:57
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