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 :

Les structures en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 27
    Par défaut Les structures en C
    Bonjour,

    voici mon programme qui permet d'enregistrer des étudiants et de les afficher.
    il ne fonctionne pas correctement. étant nouveaux dans la programmation en C, pouvez-vous vérifier mon code pour moi.

    Merci
    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
    #include <stdio.h>
    #include <stdlib.h>
    struct etudiant
           { 
             int matricule;
             char nom[15];
             int age;
           };
    int i;
     
    void saisir();
    void afficher();
    void saisir()
    {
         struct etudiant etu[i]; 
         for(i=0;i<=1;i++) {
     
         printf("entrer le matricule de l'etudiant %d \n",i+1);
         scanf("%d",&etu[i].matricule);
          printf("entrer le nom de l'etudiant %d \n",i+1);
         scanf("%s",&etu[i].nom);   
          printf("entrer l age de l'etudiant %d \n",i+1);
         scanf("%d",&etu[i].age);
         } 
    };
    void afficher()
    {
         struct etudiant etud[i]; 
          for(i=0;i<=1;i++) {
     
          printf("------------ Etudiant %d -------------- \n",i+1);
          printf("MAtricule : %d \n",etud[i].matricule);         
          printf("Age: %d \n",etud[i].age); 
          printf("Nom: %s \n",etud[i].nom); 
     
          printf("\n");
         }
         printf("--------------------------------");
    };
     
    main()
    {    
          saisir();
          afficher();
          system("pause");
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    • Ton indentation dans les boucles for est à revoir.
    • int i; à la ligne ligne 9 : on évite au maximum l'utilisation des variables globales.
    • struct etudiant etu[i]; Ceci étant un cas d'école, je doute que tu veuilles utilise un VLA du C99. Il te faux utiliser une constante #define, ou faire de l'allocation dynamique malloc()/free().
    • De plus, entre tes deux fonctions, les deux structures déclarées n'ont rien à voir entre-elles. Ce sont deux variables bien distinctes.
      Je te suggère de déclarer ta structure dans le main() et la faire passer en paramètre à tes deux fonctions.
    • Le prototype du main() est incorrect, on utilise
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      int main(void)
      /* ou */
      int main(int argc, char *argv[]) /* si l'on souhaite utiliser les arguments */
      Ce qui amène à retourner une valeur. (return 0; si tout s'est bien déroulé.)
    • system("pause"); de Windows n'est pas portable, je te conseille d'utiliser getchar(); à la place.
    • Concernant cette ligne : scanf("%s",&etu[i].nom);, je te conseille la lecture de ce tutoriel.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sniperone Voir le message
    Bonjour,

    voici mon programme qui permet d'enregistrer des étudiants et de les afficher.
    il ne fonctionne pas correctement. étant nouveaux dans la programmation en C, pouvez-vous vérifier mon code pour moi.
    Salut

    Ce serait trop long de te dire tout ce qui ne va pas. Je préfère retaper un code correct

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NB_ETUDIANT        (10)
     
    struct s_etudiant
    { 
        int matricule;
        char nom[15];
        unsigned short age;
    };
     
    void saisir(struct s_etudiant*, size_t);
    void afficher(struct s_etudiant*, size_t);
     
    void saisir(struct s_etudiant *etu, size_t nb)
    {
         size_t i;
     
         for (i=0; i < nb; i++) {
            printf("entrer le matricule de l'etudiant %lu\n", i+1);
            scanf("%d", &etu[i].matricule);
     
            printf("entrer le nom de l'etudiant %lu\n", i+1);
            scanf("%s", etu[i].nom);     // Pas de "&" car nom est déjà un pointeur
            // Ou alors scanf("%s", &etu[i].nom[0]);
     
            printf("entrer l age de l'etudiant %lu\n", i+1);
            scanf("%hu", &etu[i].age);
         } 
    }
     
    void afficher(struct s_etudiant *etu, size_t nb)
    {
        size_t i;
        for (i=0; i<=nb; i++) {
            printf("------------ Etudiant %lu -------------- \n",i+1);
            printf("Matricule : %d\n", etu[i].matricule);         
            printf("Age: %hu\n", etu[i].age); 
            printf("Nom: %s\n", etu[i].nom); 
            printf("\n");
        }
        printf("--------------------------------\n");
    }
     
    int main()
    {
          struct s_etudiant etudiant[NB_ETUDIANT];    
          saisir(etudiant, NB_ETUDIANT);
          afficher(etudiant, NB_ETUDIANT);
          system("pause");
    }
    Voilà. Essaye d'utiliser les remarques de Winjerome associées à ce code pour comprendre comment fonctionne le C. Et surtout essaye aussi de lire qq bouquins/tutos...

    PS: Si le type size_t n'est pas connu (je crois qu'il faut inclure <sys/types.h> alors remplace-le par un "unsigned long")

    PS2: Essaye d'aérer ton code (espaces après les virgules et les points-virgules et après le for). Cela aidera à la relecture (comme en français quoi). En revanche les espaces avant le "\n" sont inutiles.

    PS3: s'il s'agit d'un devoir, surtout ne rend pas ce que je viens d'écrire. Le prof verrait de suite qu'il n'est pas de toi...
    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]

  4. #4
    Candidat au Club
    Homme Profil pro
    lnagage c
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : lnagage c
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Par défaut structure
    Tu dois changer struct etudiant etu[i]; par struct etudiant etu[2];.
    <i> nombre de max des élevés ::: et tu dois supprimer & de la chaine
    résultat :
    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
    #include <stdio.h>
    #include <stdlib.h>
    struct etudiant
           {
             int matricule;
             char nom[15];
             int age;
           };
    int i;
     
    void saisir();
    void afficher();
    void saisir()
    {
         struct etudiant etu[2];
         for(i=0;i<=1;i++) {
     
         printf("entrer le matricule de l'etudiant %d \n",i+1);
         scanf("%d",&etu[i].matricule);
          printf("entrer le nom de l'etudiant %d \n",i+1);
         scanf("%s",etu[i].nom);
          printf("entrer l age de l'etudiant %d \n",i+1);
         scanf("%d",&etu[i].age);
         }
    };
    void afficher()
    {
         struct etudiant etud[2];
          for(i=0;i<=1;i++) {
     
          printf("------------ Etudiant %d -------------- \n",i+1);
          printf("MAtricule : %d \n",etud[i].matricule);
          printf("Age: %d \n",etud[i].age);
          printf("Nom: %s \n",etud[i].nom);
     
          printf("\n");
         }
         printf("--------------------------------\n");
    };
     
    main()
    {
          saisir();
          afficher();
          system("pause");
    }

Discussions similaires

  1. Les structures et vous
    Par lanonyme dans le forum C++
    Réponses: 14
    Dernier message: 18/05/2006, 11h17
  2. [POO] Les structures de données comme en C++...
    Par FrankOVD dans le forum Langage
    Réponses: 3
    Dernier message: 27/04/2006, 19h44
  3. Aide sur les structure
    Par Yoshio dans le forum C
    Réponses: 7
    Dernier message: 18/02/2006, 12h56
  4. Question sur les statics et les structures
    Par Steph12 dans le forum C
    Réponses: 3
    Dernier message: 24/03/2005, 13h20
  5. Coherence dans les structures arborescentes...
    Par Alec6 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/09/2004, 12h04

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