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 :

boucle avec fscanf() : resultat PLANTAGE


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Par défaut boucle avec fscanf() : resultat PLANTAGE
    Salut à tous,

    Je souhaite récupérer une suite de valeurs séparées par un espace dans un fichier avec fscanf(). Voici mon morceau de code mais le programme plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    char *data[500];
    int i, retour;
    FILE *fichier = NULL;
     
    fichier = fopen("C:\\fichier.txt", r);
     
    if(fichier != NULL) {
        for(i = 0; i < 500; i++) {
            if( retour = fscanf(fichier,"%s", data[i]) != EOF &&retour != 0)
            {
             printf("%s" data[i]);
            }
    }
    N.B: Quand j'annule la boucle for(), j'ai une seule valeur qui s'affiche.

    Merci.

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    data est un tableau de 500 caractères.
    Puis tu as une boucle qui fait 500 fscanf de taille chaîne de caractères (%s).
    Pour rappel une chaîne de caractères c'est plusieurs caractères.

    Donc si tu as des chaînes de caractères de taille x dans ton fichier alors tu stockes dans ton tableau data : x * 500 caractères.

    Edit : bien vu VDD !
    Pour ma défense l'étoile était trop petite...

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 761
    Par défaut
    Hello,

    Citation Envoyé par transgohan Voir le message
    data est un tableau de 500 caractères....
    Pas vraiment data est un tableau de 500 pointeurs sur des données de type caractère. Il faudrait, pour chaque data[i], faire un malloc( /* d'une taille suffisante */ ) pour que cela fonctionne.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par aboubakar25 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( retour = fscanf(fichier,"%s", data[i]) != EOF && ...)
    Bonjour

    En dehors de la magnifique remarque d'edgarjacobs qui a mis le doigt pile poil sur le noeud principal du problème, ton instruction de test n'est pas bonne.
    Les comparaisons se font de la droite vers la gauche. Donc au lieu de mettre le résultat de fsanf(...) dans la variable "retour", tu y mets le résultat de la comparaison fsanf(...) != EOF.

    Citation Envoyé par aboubakar25 Voir le message
    N.B: Quand j'annule la boucle for(), j'ai une seule valeur qui s'affiche.
    Oui, c'est normal. Boucle sur une instruction = plein d'appels à cette instruction ; pas de boucle sur une instruction = instruction appelée une seule fois.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Par défaut
    Merci a tous voila mon nouveau code qui marche bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char *data[500];
    int i;
    FILE *fichier = NULL;
     
    if(fichier != NULL) {
           for(size_t i = 0; i < 500 && (1 == fscanf(fichier, "%d", &data[i])); i++){
           printf("Lecture des donnees en cours...");
           }
    }

  6. #6
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 761
    Par défaut
    Citation Envoyé par aboubakar25 Voir le message
    Merci a tous voila mon nouveau code qui marche bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char *data[500];
    int i;
    FILE *fichier = NULL;
     
    if(fichier != NULL) {
           for(size_t i = 0; i < 500 && (1 == fscanf(fichier, "%d", &data[i])); i++){
           printf("Lecture des donnees en cours...");
           }
    }
    C'est du grand n'importe quoi. Voir ton autre discussion sur oc.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par aboubakar25 Voir le message
    Citation Envoyé par edgarjacobs Voir le message
    Il faudrait, pour chaque data[i], faire un malloc( /* d'une taille suffisante */ ) pour que cela fonctionne.
    voila mon nouveau code qui marche bien:
    Mouais. Ca "marchera bien" pendant 15 jours et le 16°...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre averti
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int data[500], i;
    FILE *fichier = NULL;
     
    if(fichier != NULL) {
           for( i = 0; i < 500 && (1 == fscanf(fichier, "%d", &data[i])); i++){
           printf("Lecture des donnees en cours...");
           }
    }
    C'est plutot ce code qui marche bien.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par aboubakar25 Voir le message
    C'est plutot ce code qui marche bien.
    Là on est d'accord.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre averti
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Par défaut
    cool

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

Discussions similaires

  1. [2008R2] Procédure stockée avec une boucle sur les resultat
    Par sak_ura dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/02/2013, 09h23
  2. Boucle d'exécution avec risque de plantage du programme
    Par Atomz dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 29/08/2012, 09h43
  3. Boucle avec un TIBDataSet
    Par SebCBien dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/09/2004, 17h33
  4. Boucle avec variable à incrémenter
    Par snoop dans le forum Linux
    Réponses: 2
    Dernier message: 19/03/2004, 11h07
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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