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

Réseau C Discussion :

Lire un mot dans un fichier [Débutant(e)]


Sujet :

Réseau C

  1. #21
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Merci pour les fonction

    Problème suivant

    J'ai déclaré une structure groupe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct groupe {
            char  chaine[100];
            int type;
                    };
    Puis un pointeur dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct groupe groupe[10];
    Enfin dans mon programme j'ai besoin de cette condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (groupe[i].chaine[0]=='"')              //ce groupe correcpond à une chaine de caractère
    {
                    groupe[i].type = 1;
    }
    else if (groupe[i].chaine[0]=="(" || isdigit(groupe[i].chaine[0]))   //expression algébrique
    {
                    groupe[i].type = 2;
    }
    Ca fonctionne mais lors de la compilation j'ai le message :

    attention : comparaison entre un pointeur et un entier

    Et seulement pour la seconde condition (le else if) pour la première il me dit rien
    Si quelqu'un voit le problème...Car là je compare bien un caractère avec un autre...

  2. #22
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Duf59
    [...]
    Puis un pointeur dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct groupe groupe[10];
    Non, ça, ce n'est pas un pointeur : c'est un tableau de structures.

    Citation Envoyé par Duf59
    Enfin dans mon programme j'ai besoin de cette condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (groupe[i].chaine[0]=='"')              //ce groupe correcpond à une chaine de caractère
    {
                    groupe[i].type = 1;
    }
    else if (groupe[i].chaine[0]=="(" || isdigit(groupe[i].chaine[0]))   //expression algébrique
    {
                    groupe[i].type = 2;
    }
    Ca fonctionne mais lors de la compilation j'ai le message :

    attention : comparaison entre un pointeur et un entier

    Et seulement pour la seconde condition (le else if) pour la première il me dit rien
    Si quelqu'un voit le problème...Car là je compare bien un caractère avec un autre...
    Non, tu compares le caractère groupe[i].chaine[0] avec (le pointeur sur) la chaîne "(". Certes, c'est une chaîne d'un caractère mais c'est une chaîne quand même : la valeur littérale d'un caractère doit être encadrée par des apostrophes, pas des guillemets (qui sont réservés aux chaînes).
    Aussi, le membre "type" de ta structure contient un code servant à identifier un type. Dans ce cas, afin d'améliorer la lisibilité et de faciliter la maintenance, tu devrais utiliser des #define plutôt que d'utiliser la valeur littérale de ces codes.
    Ce qui donne...
    ...dans un ".h" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define TYPE_CHAINE 1
    #define TYPE_EXPRESSION_ALGEBRIQUE 2
    ...dans le ".c" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "leHeaderContenantLesDefineType.h"
     
    /* [...] blablabla [...] */
     
    if ( groupe[i].chaine[0]=='"' ) {
        groupe[i].type = TYPE_CHAINE;
    } else if ( ( groupe[i].chaine[0] == '(' ) || isdigit( groupe[i].chaine[0] ) ) {
        groupe[i].type = TYPE_EXPRESSION_ALGEBRIQUE;
    }
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  3. #23
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Duf59

    Puis un pointeur dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct groupe groupe[10];
    Ce n'est pas un pointeur mais un tableau de 10 éléments.

    Enfin dans mon programme j'ai besoin de cette condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (groupe[i].chaine[0]=='"')              //ce groupe correcpond à une chaine de caractère
    {
                    groupe[i].type = 1;
    }
    else if (groupe[i].chaine[0]=="(" || isdigit(groupe[i].chaine[0]))   //expression algébrique
    {
                    groupe[i].type = 2;
    }
    Ca fonctionne mais lors de la compilation j'ai le message :

    attention : comparaison entre un pointeur et un entier

    Et seulement pour la seconde condition (le else if) pour la première il me dit rien
    Non, dans le deuxième cas, tu compares un caractères avec un pointeur puisque "(" va se transformer en un pointeur vers les caractères '(' et ensuite un caractère '\0'. Ce n'est pas du tout pareil que ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else if ((groupe[i].chaine[0]=='(') || (isdigit(groupe[i].chaine[0])))   //expression
    Jc

  4. #24
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    aaahhh je suis vraiment nul c'est juste que j'ai remplacé les apostrophes par des guillemets..... Merci

    sinon pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct groupe groupe[10]
    C'est bien ce que je veux un tableau de 10 élément, chaque élément correspondant à une structure.


    Sinon je voudrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    goupe[1].chaine = groupe[2].chaine ;
    On a donc de chaque coté un pointeur sur une chaine de caractère donc pourquoi quand je compile quelque chose comme ca il me dit type incompatible ?

    En tout cas merci pour votre aide, mon projet avance pas très vide mais ca avance, pour faire quelque chose de propre je devrai faire de l'allocation dynamique au lieu de declarer un tableau de 10 éléments au pif mais bon je vais dejà essayer de faire un truc qui marche comme ca on verra après...^_^

    Et aussi bien vu pour les #define c'est vrai que ca pourra aider ceux qui vont devoir comprendre tout ca lol

  5. #25
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu n'as pas des pointeurs vers chaîne de caractère, mais des tableaux de caractères.
    Et les tableaux ne sont pas affectables : Tu dois utiliser strcmp().
    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.

  6. #26
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Médinoc
    Tu n'as pas des pointeurs vers chaîne de caractère, mais des tableaux de caractères.
    Et les tableaux ne sont pas affectables : Tu dois utiliser strcmp().
    strcpy()...
    Pas de Wi-Fi à la maison : CPL

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Y'a des jours où je dois être fatigué...
    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. #28
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Merci (j'avais quand même compris pour strcpy )

    Bon je continue mais je pense que je repasserai vous voir

    (En fait on a toute la semaine pour faire notre projet, à rentre vendredi)

  9. #29
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Me revoilà, bon ca se corse un peu

    Une structure qui permet de stocker des variables arbre lv/lh) :
    je stocke chaque lettre de la variable dans une "feuille" de l'arbre et je stocke son type et sa valeur dans la dernière.

    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
     
    typedef struct stovar{
            /*un champ contenant une lettre du nom de variable*/
            char lettre;
            /*un char qui contient le type de variable :
            - N : non initialise
            - I : entier
            - F : flottant
            - S : chaine de caracteres*/
            char type;
            /*un pointeur générique vers la donnee */
            void * donnee;
            /*pointeurs autoreferentiels de liens vertical et horizontal*/
            struct stovar * lv;
            struct stovar * lh;
     
    };
    Une fonction récursive qui me permet d'obtenir la valeur d'une variable :
    retourne un pointeur sur une chaine de caractère, un entier ou un flottant
    (j'ai donc retourné un void)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void * lire (char * nom, stovar * S)
    Voilà je voudrais savoir si je souhaite remplacer une variable par son contenu est ce que c'est correcte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char * var=NULL;
    char Ma_variable[10];
     
    var = (char *) lire( Ma_variable, STOVAR ); //Lecture du contenu de Ma_variable
    while ( (Ma_variable[k] = var[k]) != '\0') k++;  //remplacement de Ma_variable par son contenu
    Car en fait ca compile mais ca ne fonctionne pas tout le temps et j'ai ce genre d'erreur avec valgrind :
    Invalid read of size 1
    Address 0xBED9FB3A is just below the stack ptr.

    Merci pour votre patience

    Je sais pas si c'est assez compréhensible mais ca fait partie d'un programme assez important (interpreteur) et j'ai pas envie de vous assomer avec tout le code

Discussions similaires

  1. Lire un mot dans un fichier texte
    Par Sophie_Géo dans le forum Développement de jobs
    Réponses: 9
    Dernier message: 12/03/2015, 14h06
  2. Ecrire & Lire des énumérés dans un fichier Texte
    Par WebPac dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 10h04
  3. lire un mot dans un fichier
    Par ibtisss dans le forum Langage
    Réponses: 3
    Dernier message: 08/11/2005, 12h14
  4. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    Réponses: 5
    Dernier message: 07/04/2004, 23h42
  5. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 15h22

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