Structure tableau dynamique

Fermé
saidinfo Messages postés 10 Date d'inscription mardi 13 janvier 2015 Statut Membre Dernière intervention 11 octobre 2015 - Modifié par Whismeril le 8/02/2015 à 10:58
saidinfo Messages postés 10 Date d'inscription mardi 13 janvier 2015 Statut Membre Dernière intervention 11 octobre 2015 - 11 févr. 2015 à 16:47
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

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
8 févr. 2015 à 19:27
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
saidinfo Messages postés 10 Date d'inscription mardi 13 janvier 2015 Statut Membre Dernière intervention 11 octobre 2015
Modifié par baladur13 le 18/02/2015 à 10:16
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