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 :

fscanf avec des pointeur


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut fscanf avec des pointeur
    Bonjour voilà j’ai eu un problème avec une fonction, dans ma fonction j’utilise fscanf pour l’utilise je réfléchie un peu et me rappel quelle et un peu similaire a scanf, j’ai eu déjà plusieurs problèmes car j’oubliais qu’il fallait lui envoyer l’adresse de la variable avec le symbole &, donc je regarde d’un peu plus pré ma fonction et je voie que j’utilise des pointeurs, fier comme un coc je me dit bah cette fois si tu m’aura pas, pas la penne de mettre & car j’utilise déjà des adresses via mes pointeurs et que j’ai déjà code une fois un scanf avec une variable standard pointeur et ça marche très bien alors je code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(stat_doc,"%d %d %d",stat->victoires,stat->defaites,stat->parties);
    et bé non je me suis encore troupe mais que se passe-t-il ? je teste le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(stat_doc,"%d %d %d",&stat->victoires,&stat->defaites,&stat->parties);
    ça marche miracle, mais je réfléchie encore un peu et essayer de comprendre qu’est que j’ai envoyé dans le premier code, je sais c’est l’adresse des variables victoires, défaites et parties dans le second code je lui envoie ???? à mon avis c’est l’adresse de stat le truc c’est pourquoi je dois lui envoyer l’adresse de stat et pas l’adresse des variables victoires, défaites et parties et c’est quoi la différence entre ces variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    &age
    *age
    &stat.victoires
    stat->victoires
    &stat->victoires
    Merci d’avance pour vos lumières

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 868
    Par défaut
    Petit cours.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Il y a deux touches très intéressantes sur le clavier : . et ,. Elles sont pratiques pour faire des phrases. Il y a aussi les concepts de grammaire et d'orthographes, malheureusement ils ne sont pas inclus dans le clavier. Néanmoins, le navigateur web propose souvent une aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    fscanf(stat_doc,"%d %d %d",stat->victoires,stat->defaites,stat->parties);
     
    fscanf(stat_doc,"%d %d %d",&stat->victoires,&stat->defaites,&stat->parties);
     
    &age
    *age
    &stat.victoires
    stat->victoires
    &stat->victoires
    Sans la définition de age et celle de la structure stat, on ne pourra pas dire grand chose d'intéressant.

    Par ailleurs, je ne sais pas quel compilateur tu utilises, mais il y a des options pour activer plein de warnings qui aident beaucoup pour coder. Pour gcc, ce sont -Wall -Wextra. Utilise ce genre d'options, ton compilateur t'avertira de potentiels problèmes.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut
    merci pour ceux rappel, mais ça explique pas pourquoi mais pointeurs ne suffit pas à mon fscanf car la question n’est pas de savoir comment utilise les pointeur car je pense que j’ai bien compris même si il y a une logique parfois qui me fait encore défaut, le truc c’est que fscanf a besoin d’adresse pour modifie le contenu de la variable que je possède déjà vu que j’utilise des pointeur donc quand je code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    scanf («%d »,pointeur_sur_variable) ;
    scanf(« %d »,&variable) ;
    j’ai exactement le même résultat c’est deux ligne dise exactement la même chose et fonctionne
    là je code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(stat_doc,"%d %d %d",stat->victoires,stat->defaites,stat->parties);
    sa marche pas ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(stat_doc,"%d %d %d",&stat->victoires,&stat->defaites,&stat->parties);
    ça marche par contre ces deux ligne pour moi ne dise pas du tout la même chose ?
    la première dessine l’adresse des variable de victoires…..
    la second dessine l’adresse de l’adresse des variable de victoires……

  5. #5
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Comme dis Bktero : montre nous ta structure !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct ma_struc1
    {
      char caractere;
      char *str;
      char **addr;
      char[42] tab;
    };
    Parce que là dedans...
    Beaucoup de choses sont possibles...
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut
    Ok je n’ai pas vu le message de Bktero ^^
    Alors voilà la structure de stat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct stat_joueur stat_joueur;
    struct stat_joueur {
        char joueur1 [15];
        int parties;
        int victoires;
        int defaites;
    };
    C’est une structure comme une autre ???
    Pour âge imaginons que c’est

    J’ai pris une variable un peu au hasard
    j'utilise c::b pour code

    Ps : j’utilise Word pour poste des messages désole de pas avoir autant de facilité en français que d'autre je ferais un effort ^^

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Dans ce cas, stat->victoires n'est pas un pointeur... C'est un int. Et fscanf te demande un pointeur sur int, ce qu'un compilateur bien réglé t'indique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>
    #include <stdlib.h>
     
    struct stat_joueur {
        char joueur1 [15];
        int parties;
        int victoires;
        int defaites;
    };
     
    typedef struct stat_joueur stat_joueur;
     
     
    void remplir(stat_joueur *pt_stat)
    {
        fscanf(stdin,"%d %d %d", pt_stat->victoires, pt_stat->defaites, pt_stat->parties);
    }
     
    int main(void)
    {
        stat_joueur stat = { {"Quelquun"}, 0, 0 ,0 };
        remplir(&stat);
     
    	return 0;
    }
    Donne les warnings :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    D:\Users\pgradot\Documents\C\main.c||In function 'remplir':|
    D:\Users\pgradot\Documents\C\main.c|16|warning: format '%d' expects argument of type 'int *', but argument 3 has type 'int' [-Wformat]|
    D:\Users\pgradot\Documents\C\main.c|16|warning: format '%d' expects argument of type 'int *', but argument 4 has type 'int' [-Wformat]|
    D:\Users\pgradot\Documents\C\main.c|16|warning: format '%d' expects argument of type 'int *', but argument 5 has type 'int' [-Wformat]|
    ||=== Build finished: 0 errors, 3 warnings (0 minutes, 0 seconds) ===|
    EDITION :
    Pour les questions sur à quoi correspond quoi :

    Pour age de type int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        int age = 42;
        int* = &age; // &age est l'adresse de la variable age
        int error = *age; // erreur ! on ne peut appliquer l'operateur * qu'a un pointeur
    On obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\Users\pgradot\Documents\C\main.c|32|error: invalid type argument of unary '*' (have 'int')|


    Pour les champs, en mettant ce code dans le code précédent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void quiquequoi(stat_joueur *stat)
    {
        int error1 = &stat.victoires;       // il faut appliquer -> et non . car stat est un pointeur sur structure
        int victories = stat->victoires;    // c'est un entier qui vaut 'victoires'
        int *ad_victoires = &stat->victoires; // l'adresse du champ 'victoires'
    }
    avec l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\Users\pgradot\Documents\C\main.c|26|error: request for member 'victoires' in something not a structure or union|
    EDITION 2 :
    http://www.idris.fr/data/cours/lang/..._priorite.html
    La priorité des opérations (si je ne m'abuse) indique que -> s'applique avant &. &stat->victoires est donc bien l'adresse du champ 'victoires' et non une tentative d'accéder à un champ de l'adresse de 'stat'.

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut
    ok merci pour ta réponse j'y vois un peut plus clair

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

Discussions similaires

  1. problème char-actéristique avec des pointeurs
    Par Antigonos Ier Gonatas dans le forum C
    Réponses: 11
    Dernier message: 16/04/2007, 21h22
  2. Réponses: 2
    Dernier message: 21/03/2007, 10h55
  3. Réponses: 8
    Dernier message: 11/03/2007, 18h10
  4. Réponses: 2
    Dernier message: 21/02/2007, 13h28
  5. Probleme avec des pointeurs...
    Par barucca dans le forum C++
    Réponses: 5
    Dernier message: 23/08/2005, 21h05

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