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 :

Apprentissage des structures


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut Apprentissage des structures
    Salut à tous ,
    j'ai débuté le langage c il n'ya pas longtemps et j'en suis aux structures. Seulement j'ai voulu essayer à la pratique et j'ai un petit souci avec mon code

    D'abords j'ai crée un fichier header (monheader.h) avec les structures déclarées comme suit:

    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 enum Profession Profession;
    enum Profession
    {
    etudiant, cadre, artiste, litteraire, scientifique, juriste,chomeur,autre
     
    };
     
     
    typedef struct Personne  Personne;
    struct Personne
    {
    char nom[100];
    char prenom[100];
    int sexe ; //  1 si masculin, 0 si feminin
    int age;
    Profession travail;
    };
    Et voici mon fichier contenant mon code source structure.c permettant d'initialiser une variable de type personne.


    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
    #include <stdio.h>
    #include "monheader.h"
     
    int main()
    {
    Personne type;
    Personne *mec= &type ;
    mec->nom = "Bensedik";
    mec->prenom="Karim  ali";
    mec->age = 25;
    mec->sexe = 1;
    mec->travail = juriste;
     
     
    printf ("%s",type.nom);
    printf ("%s",type.prenom);
    printf ("%i",type.age);
    printf ("%i",type.sexe);
    printf ("%s",type.travail);
    return 0;
    }
    seulement à la compilation, codeblocks me renvoie deux erreurs identiques aux lignes de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mec->nom = "Bensedik";
    mec->prenom="Karim  ali";
    error: imcompaible type when assigning to type 'char[100]' from type char *
    je me suis efforcée à comprendre et déceler mon erreur mais rien jusqu'à present
    Aidez moi S'il vous plait....pleeease!

  2. #2
    Modérateur

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

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Ca n'a rien à voir avec les structures mais avec les chaines de caractères. Tu ne peux pas affecter la valeur d'une chaine avec =, sauf lors de l'initialisation. Il faut utiliser utiliser les fonctions de la bibliothèque standard pour copier une chaine.

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
     
     
    int main(void)
    {
    	char une[100] = {0};
    	char deux[100] = "Voici une chaine correctement initialisee";
     
    //	une = "Ceci n'est pas possible";
     
    	strcpy(une , deux); // la, ca marche et on a bien deux chaines distinctes
    	printf("%p : %s\n", une, une);
    	printf("%p : %s\n", deux, deux);
     
    	return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $alias gccw
    alias gccw='gcc -Wall -Wextra'
    $gccw copie_chaines.c && ./a.out 
    0x7fff61d26a84 : Voici une chaine correctement initialisee
    0x7fff61d26a20 : Voici une chaine correctement initialisee

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Par contre tu peux faire une initialisation directe de ta personne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "monheader.h"
    int main() {
        const int masculin = 1;
        Personne quelqu_un = {"Bensedik", "Karim ali",masculin,25,juriste};
        return 0;
    }

  4. #4
    Membre éclairé Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Par défaut
    Citation Envoyé par carinelog Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mec->nom = "Bensedik";
    mec->prenom="Karim  ali";
    je me suis efforcée à comprendre et déceler mon erreur mais rien jusqu'à present
    Aidez moi S'il vous plait....pleeeeeeeeease!
    Pour préciser la remarque de Bktero, ton code doit devenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strcpy(mec->nom, "Bensedik");
    strcpy(mec->prenom, "Karim  ali");

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut re-probleme de structure
    salut les gars! Merci pour vos contributions
    J'ai suivi vos suggestions et voilà mon nouveau code source:
    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
    26
    int main()
    {
    Personne type;
    Personne *mec= &type ;
    initialiser(mec);
    printf ("%s",type.nom);
    printf ("%s",type.prenom);
    printf ("Age:%i\n",type.age);
    printf ("%i\n",type.sexe);
    printf ("%i",type.travail);
     
     
    return 0;
    }
    void initialiser(Personne *coordonnees)
     
    {
     
    strcpy(coordonnees->nom, "Bensedik\n");
    strcpy(coordonnees->prenom, "karim ali\n");
    coordonnees->age=25;
    coordonnees->sexe=1;
    coordonnees->travail= juriste;
     
     
    }
    A l'execution, j'ai ce resultat:

    Bensedik
    Karim ali
    Age 25
    1
    5
    c'est la derniere ligne qui me dérange en fait. j'aimerais mieux faire s'afficher "juriste" au lieu de 5 mais comment?


    Merci d'avance !

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    en ayant une fonction pour donner la valeur de l'énumération correspondante. J'imagine un stringOf(Profession p);

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut
    salut leternel! Apres une fonction, ça passe tout à fait.
    Merci pour ton aide!!!

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    J'aurais pu donner des explications complémentaires…

    Une énumération déclare un identifieur (ou plusieurs), similaires à des variables (constantes).
    Il est impossible de récupérer à l'exécution le nom d'un identifieur, parce que dans le processus de compilation, il est d'abord remplacé par un nom absolument unique et utile pour l'optimisation (en gros, juriste devient la constante enum17_2, valant 2), puis par rien du tout (juste 2, codé en dur).

    C'est juste un tout petit peu moins vrai pour un nom de fonction (si on a les symboles de débuggage).

    Donc, il faut écrire à la main la conversion.

    C'est le même type de problème que pour #define N 2

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

Discussions similaires

  1. [Lex/Yacc] Aide traduction des structures de contrôle
    Par pelo68 dans le forum Générateurs de compilateur
    Réponses: 2
    Dernier message: 07/12/2010, 10h26
  2. Operations bit à bit sur des structures
    Par DarkNagash dans le forum C
    Réponses: 4
    Dernier message: 16/03/2006, 13h59
  3. [Stratégie] Type des structure de persistance
    Par calogerogigante dans le forum Général Java
    Réponses: 10
    Dernier message: 09/02/2006, 08h06
  4. Probleme avec des structures
    Par lenectar dans le forum C
    Réponses: 17
    Dernier message: 30/12/2005, 09h53

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