IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Cas particulier d'un fscanf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 17
    Par défaut Cas particulier d'un fscanf
    Bonjour,

    je suis coincé sur un probleme d'apparence trivial, mais il n'en a pas l'air pour le moins. Le voici :

    J'ai un fichier structuré de la manière suivante : nom1:nom2:.....:nomN (il contient donc une unique ligne).

    Je dois écrire la fonction suivante : void select(int i, FILE* f, char c[50]) qui range dans c le i-eme nom. je dois pour cela utiliser la fonction fscanf().

    j'invoque fscanf de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fscanf(f, "%s%*1[:]", c, buf) != EOF)
    le programme juste devrait boucler i fois, or mon programme range dans c la ligne entière et boucle donc une fois. Comment réaliser la fonction voulue en utilisant fscanf() ?

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Premièrement tu dois lire toute la ligne soit par fgets ou même par fscanf car il n’y a pas de séparateur
    fscanf(f, "%s",s) ;

    puis tu parcourras ta chaîne caractère par caractère jusqu a ce que tu arrives au dernier séparateur ça veut dire dernier champ puis tu copiera ce dernière champs dans une autre chaîne s2

  3. #3
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    bonjour,

    je pense que fscanf ne te permet pas de recuperer le ieme nom de la ligne.

    Ma solution ce base sur les fonction avec delemiteur, et ma preferer c'est strtok();

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par cmoibal Voir le message
    bonjour,

    je pense que fscanf ne te permet pas de recuperer le ieme nom de la ligne.

    Ma solution ce base sur les fonction avec delemiteur, et ma preferer c'est strtok();
    Le dernier élément de la ligne va être inclut dans la chaîne si tu lis avec fscanf

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ne serait-ce pas plutôt quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(f,"%[^:]%*[:]", c);

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par diogene Voir le message
    Ne serait-ce pas plutôt quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(f,"%[^:]%*[:]", c);
    Bien sure que non

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sauf que %s tout court est à bannir dans toutes les fonctions sœurs de scanf(). Il faut au moins préciser la taille du buffer.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par dot-_-net Voir le message
    Bien sure que non
    Je ne veux pas lire la ligne mais répondre à la question du posteur pjuladd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Effacer (cas particulier) d'un champ de formulaire
    Par frog43 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 17/05/2006, 18h29
  2. Réponses: 27
    Dernier message: 12/01/2006, 11h04
  3. cas particulier agaçant
    Par devdébuto dans le forum C
    Réponses: 17
    Dernier message: 13/12/2005, 23h45
  4. Enregistrement courant après refresh [cas particulier]
    Par say dans le forum Bases de données
    Réponses: 8
    Dernier message: 02/08/2005, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo