La fonction fscanf ou fgets

Résolu
Pierre_Marie Messages postés 3 Statut Membre -  
fiddy Messages postés 441 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

  1. paly2 Messages postés 261 Statut Membre 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
    1. Pierre_Marie Messages postés 3 Statut Membre
       
      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
    2. fiddy Messages postés 441 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