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 :

Tableau dynamique de structure


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut Tableau dynamique de structure
    Salut chers développeurs!
    J'ai un petit problème pour l'accés à des données d'un tableau de type structure.
    Voici mon code:

    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
    27
    typedef struct{
    char *nom;
    int note; 
    }etudiant;
    etudiant e;
    etudiant *tab_etud;
    void saisie(){
       printf("Donner le nombre d'etudiant: ");
       scanf("%d",&nb);
       tab_etud=(etudiant*)malloc(nb*sizeof(etudiant));
       if(tab_etud!=NULL){
                    for(i=0;i<nb;i++){
                     printf("\n\t\tEtudiant %d\n",i);
                          printf("\tNom: ");
                          scanf("%s",&e.nom);
                          printf("\n\tSa note: ");
                          scanf("%d",&e.note);
                          tab_etud[i]=e;              
                          }                
                    }  
       }
     
     void affiche(){
           for(i=0;i<nb;i++){
              printf("\t%s-->%d\n",tab_etud[i].nom,tab_etud[i].note);
            }
          }
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    je suis arrivé à saisir le nom d'un etudiant et sa note mais j'ai un problème pour l'affichage!
    ça m'a déjà faire perdre des nuits et je compte sur votre aide mes chers pour y remédier.
    Cordialement ELDE!

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par diouflamine87 Voir le message
    je suis arrivé à saisir le nom d'un etudiant et sa note mais j'ai un problème pour l'affichage!
    Problème à la construction ou à l'exécution ?

    Que sont i et nb ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    In function 'affiche':
    29: error: 'i' undeclared (first use in this function)
    29: error: 'nb' undeclared (first use in this function)
    PS : n'hésite pas à utiliser la balise code (bouton #)

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 080
    Par défaut
    Ce code est tout simplement illisible. Tu t'attend a ce que nous puissions le lire ?


    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    typedef struct
    {
        char *nom;
        int note;
    }etudiant;
     
    etudiant e;
    etudiant *tab_etud;
     
    void saisie()
    {
        printf("Donner le nombre d'etudiant: ");
        scanf("%d",&nb);
        tab_etud=(etudiant*)malloc(nb*sizeof(etudiant));
        if(tab_etud!=NULL)
        {
            for(i=0;i<nb;i++)
            {
                 printf("\n\t\tEtudiant %d\n",i);
                 printf("\tNom: ");
                 scanf("%s",&e.nom);
                 printf("\n\tSa note: ");
                 scanf("%d",&e.note);
                 tab_etud[i]=e;
           }
        }
    }
     
    void affiche()
    {
        for(i=0;i<nb;i++)
        {
            printf("\t%s-->%d\n",tab_etud[i].nom,tab_etud[i].note);
        }
    }
    Voila, ca a l'air mieux, non ?

    Premiere remarque : pas de main
    Deuxieme, : Variable Global -> a eviter si tu veux pas trop de surprise.


    Refais donc ton code, et n'oublie pas de nous mettre les erreur ET un code lisible.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 385
    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 385
    Par défaut
    Attention, le buffer nom n'est toujours pas alloué.
    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.

  5. #5
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    C' t pour ne pas etre compliqué. Mais j'sprk ça va mieux maintna?
    Voici tout le code.
    Il n'ya pas de message d'erreur mais apré la saisie, quand j'essai d'afficher, le programme se plante!
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
    int i,nb;
    typedef struct{
    char *nom;
    int note; 
    }etudiant;
    etudiant e;
    etudiant *tab_etud;
    void saisie(){
    printf("Donner le nombre d'etudiant: ");
    scanf("%d",&nb);
    tab_etud=(etudiant*)malloc(nb*sizeof(etudiant));
    if(tab_etud!=NULL){
    for(i=0;i<nb;i++){
    printf("\n\t\tEtudiant %d\n",i);
    printf("\tNom: ");
    scanf("%s",&e.nom);
    printf("\n\tSa note: ");
    scanf("%d",&e.note);
    tab_etud[i]=e; 
    } 
    } 
    }
     
    void affiche(){
    for(i=0;i<nb;i++){
    printf("\t%s-->%d\n",tab_etud[i].nom,tab_etud[i].note);
    }
    } 
    int main(){
        int choix;
          do{
    	  printf("\n\t\t\tMENU PRINCIPAL\n");
    	  printf("\t\t1 SAISIE\n");
    	  printf("\t\t2 AFFICHAGE\n");
     printf("\t Entrez votre choix:\t");
    	  scanf("%d",&choix);
    	  switch(choix){
    	      case 1:printf("\n\tSAISIE DES ETUDIANTS ET LEURS NOTES!\n");
                       saisie();
                       break;
    	      case 2:printf("\n\tLISTE DES ETUDIANTS AVEC LEURS NOTES!\n");
                       affiche();
                       break;
    case 8:printf("\n\t\tMERCI DE VOTRE VISITE!!!!!!!!!!!!!");
                     printf("\n\t\t\tTaper sur une touche pour quitter...");
                   break;
     
    	      default: printf("\n\tFaites un choix entre 1 et 2");
    	    }
    	}
         while(choix <2);
         getch();
         return (0);
    }

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 385
    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 385
    Par défaut
    Mais ton scanf() écrit encore dans le vide!

    e.nom pointe dans le décor!
    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.

  7. #7
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    j'ai essayé d'alloué de l'espace pour nom en faisant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tab_etud[i].nom=(char*)malloc(sizeof(char));
    if(tab_etud[i].nom!=NULL) else strcpy(tab_etud[i].nom,e.nom);
    Mais ça ne va pas.
    Est ce que je l'ai bien fais?

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par diouflamine87 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tab_etud[i].nom=(char*)malloc(sizeof(char));
    En faisant cela, tu n'alloues qu'un seul caractère.

    Si tu veux allouer 15 caractère, il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *foo = malloc(15 * sizeof(char));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *foo = malloc(15);
    puisque sizeof(char) doit être égal à 1.

    Pour te simplifier la vie dans un premier temps, tu peux te passer d'allocation dynamique en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
    char nom[50+1];
    int note; 
    }etudiant;
    et en limitant la saisie à 50 caractères dans le scanf. (le +1 est pour le '\0' final).

    EDIT:
    le '&' est inutile dans le scanf pour les chaines de caractères.

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 385
    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 385
    Par défaut
    Pourquoi else?
    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.

  10. #10
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Merci de votre aide Medinoc!!!!!!!!!
    a +

  11. #11
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Merci Mabu pour votre aide. ça marche bien!

  12. #12
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Pourquoi else?
    no attention!

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/02/2011, 16h56
  2. Tableau dynamique de structure
    Par sakura006 dans le forum Débuter
    Réponses: 6
    Dernier message: 14/10/2008, 18h29
  3. Tableau dynamique de structure
    Par kurk49 dans le forum Débuter
    Réponses: 2
    Dernier message: 25/06/2008, 12h53
  4. Tableau dynamique de structures
    Par beb30 dans le forum C
    Réponses: 13
    Dernier message: 29/04/2006, 13h41
  5. TAD matrice (structure + tableau dynamique)
    Par supermanu dans le forum C
    Réponses: 10
    Dernier message: 13/11/2004, 21h04

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