Structure tableau dynamique

saidinfo Messages postés 17 Statut Membre -  
saidinfo Messages postés 17 Statut Membre -
Bonjour,svp j'ai vraiment troublé j'arrive pas a trouve le problème.Sinon,voici le programme :

Chaque équipe est caractérisé par : Le nom de l'équipe , la date de création du club . et un tableau de joueurs de taille 22.

Chaque joueur est caractérisé par: Son nom, son age , Salaire , nbr_but_marque , nbr_blessure , nbr_carte_jaune , nbr_carte_rouge , poste .

Déclarer un tableau de équipe .
NB que on ne sait jamais combien d'équipe l'utilisateur vas entrer .Alors, voici le programme:

#include <stdio.h>
#include <stdlib.h>
typedef struct{char nom_equipe[20];int date_creation;}equipe;
typedef struct{ equipe eq;char nom[10];int salaire,age,nbr_but,nbr_blessure,nbr_jaune,nbr_rouge;}joueurs;
joueurs *p[n];
void lit(joueurs *p,n){
    int i,j;
        p=malloc(sizeof(equipe));
        int n;printf("Entrer le nombre de l'equipe:\n");scanf("%d",&n);
        for(i=0;i<n;i++){
        printf("Entrer le nom de l'equipe n°%d:\n",i+1);
        scanf("%s",p[i]->eq.nom_equipe);
        printf("Entrer la de creation:\n");
        scanf("%d",&p[i].eq.date_creation);
        for(j=0;j<5;j++)
        {
        printf("\tEntrer le nom de la joueurs n°%d\n",j+1);
        scanf("%s",p[j].nom);
        printf("\tEntrer age:\n");
        scanf("%d",&p[j].age);
        printf("\tEntrer le salaire:\n");
        scanf("%d",&p[j].salaire);
        printf("\tEntrer le nombre de but:\n");
        scanf("%d",&p[j].nbr_but);
        printf("\tEntrer de blessure:\n");
        scanf("%d",&p[j].nbr_blessure);
        printf("\tEntrer le nombre de les cartes Jaune:\n");
        scanf("%d",&p[j].nbr_jaune);
        printf("\tEntrer le nombre des cartes rouge:\n");
        scanf("%d",&p[j].nbr_rouge);
        }
        }
        free(p);
}
int main()
{
    joueurs *p[n];
    lit(&p,n);
    return 0;
}

svp aider moi si vous savez dejà !!

EDIT: Ajout de la coloration syntaxique.

1 réponse

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    joueurs *p[n];
    Combien vaut n ? Comment est-il défini ? Tu ne peux pas mettre une variable. Il vaut donc mieux mettre : #define N 5
    (oui j'ai mis N en majuscule, convention pour signaler qu'il s'agit d'une constante).
    Les variables globales sont à proscrire (sauf cas particulier). D'autant que tu as déjà défini cette variable dans le main(). Donc à enlever tout simplement.

    void lit(joueurs *p,n){
    Tu as oublié de mettre : int n
    La variable p n'est pas de même type que celui de la fonction (tableau de pointeur vs pointeur...). Il faut choisir.

    int n;printf("Ent
    Pourquoi remettre int n; ? Il est déjà en argument...

    scanf("%d",&n);
    Pourquoi redéfinir n ?
    Si tu veux choisir la taille, il vaut mieux le faire à la déclaration de la variable joueur (dans le main()).
    Note : vaut mieux le mettre à la ligne pour plus de lisibilité.

    Pourquoi faire un free() à la fin ? Tu ne veux pas récupérer le contenu à l'extérieur de la fonction() ?

    Je te laisse corriger ton code en fonction de ces remarques. N'hésite pas aussi à dire ce que tu souhaites que ton programme fasse, car il y a plein de points à revoir.

    Note : attention à l'indentation (notamment au niveau des for())...
    Cdlt,
    0
    1. saidinfo Messages postés 17 Statut Membre
       
      Oui effectivement fiddy mrc , alors je me viens de corriger les éventuelles erreurs que j'ai commis
      voici le programme mais il reste une seul problème consacrer a la ligne 34 .

      #include <stdio.h>
      #include <stdlib.h>
      typedef struct{char nom_equipe[20];int date_creation;}equipe;
      typedef struct{ equipe eq;char nom[10];int salaire,age,nbr_but,nbr_blessure,nbr_jaune,nbr_rouge;}joueurs;
      joueurs *p;
      void lit(){
          int i,j,n;
          printf("\t\t\t\tEntrer le nombre  d'equipe");
          scanf("%d",&n);
              p=(joueurs*) malloc(sizeof(joueurs)*n);
              for(i=0;i<n;i++){
              printf("Entrer le nom de l'equipe n°%d:\n",i+1);
              scanf("%s",(p+i)->eq.nom_equipe);
              printf("Entrer la de creation:\n");
              scanf("%d",&(p+1)->eq.date_creation);
              for(j=0;j<5;j++)
              {
              printf("\tEntrer le nom de la joueurs n°%d:\t",j+1);
              scanf("%s",(p+i)->nom);
              printf("\tEntrer age:\n");
              scanf("%d",&(p+i)->age);
              printf("\tEntrer le salaire:\n");
              scanf("%d",&(p+i)->salaire);
              printf("\tEntrer le nombre de but:\n");
              scanf("%d",&(p+i)->nbr_but);
              printf("\tEntrer de blessure:\n");
              scanf("%d",&(p+i)->nbr_blessure);
              printf("\tEntrer le nombre de les cartes Jaune:\n");
              scanf("%d",&(p+i)->nbr_jaune);
              printf("\tEntrer le nombre des cartes rouge:\n");
              scanf("%d",&(p+i)->nbr_rouge);
              }
              }
              affiche(&p,n);
      }
      void affiche(joueurs *p,int n){
          int i;
          for(i=0;i<n;i++)
          {
              if((p+i)->nbr_but < (p+i)->nbr_but)
                  (p+0)->nbr_but=(p+i)->nbr_but;
          }
          printf("L'equipe qui a marqué le plus grande de but est%s\n",(p+0)->eq.nom_equipe);
      }
      int main()
      {
          joueurs *p;
          lit(&p);
      
          return 0;
      }


      est-que tu peut m'aidez svp !!
      0