Faire un classement en C
nico
-
kazouu Messages postés 466 Date d'inscription Statut Membre Dernière intervention -
kazouu Messages postés 466 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis en train d'essayer de faire un programme qui classe des equipes.
Le problème c'est que je n'arrive pas à utiliser des pointeurs de structure qui me permettrait de changer des valeurs en appelant certaines fonctions
#include <stdio.h>
#include <stdlib.h>
typedef struct classement c;
struct Equipe
{
char* nom;
int classement;
int point;
int gagne;
int nul;
int perdu;
int butpour;
int butcontre;
};
struct classement
{
struct Equipe e[2];
int journee;
};
void match(struct Equipe* e1,struct Equipe* e2) {
int score1,score2;
printf("match %s contre %s",*e1.nom,*e2.nom);
scanf("%d",&score1);
scanf("%d",&score2);
*e1.butpour+=score1;
*e1.butcontre+=score2;
*e2.butpour+=score2;
*e2.butcontre+=score1;
}
int main()
{
struct classement c;
//struct classement* c = (struct classement *) malloc(sizeof(struct classement));
c.e[0].point=0;
c.e[1].point=0;
c.e[0].nom="a";
c.e[1].nom="b";
match(&c.e[0],&c.e[1]);
if((c.e[0].point>c.e[1].point)||((c.e[0].point==c.e[1].point)&&((c.e[0].butpour-c.e[0].butcontre)>(c.e[1].butpour-c.e[1].butcontre)))) {
printf("%s %d\n",c.e[0].nom,c.e[0].point);
printf("%s %d\n",c.e[1].nom,c.e[1].point);
}
else {
printf("%s %d\n",c.e[1].nom,c.e[1].point);
printf("%s %d\n",c.e[0].nom,c.e[0].point);
}
}
Il me met comme erreur
request for member «nom» in something not a structure or union dans la fonction match
incompatible type for argument 2 of «match» dans le main en appelant la fonction
je suis en train d'essayer de faire un programme qui classe des equipes.
Le problème c'est que je n'arrive pas à utiliser des pointeurs de structure qui me permettrait de changer des valeurs en appelant certaines fonctions
#include <stdio.h>
#include <stdlib.h>
typedef struct classement c;
struct Equipe
{
char* nom;
int classement;
int point;
int gagne;
int nul;
int perdu;
int butpour;
int butcontre;
};
struct classement
{
struct Equipe e[2];
int journee;
};
void match(struct Equipe* e1,struct Equipe* e2) {
int score1,score2;
printf("match %s contre %s",*e1.nom,*e2.nom);
scanf("%d",&score1);
scanf("%d",&score2);
*e1.butpour+=score1;
*e1.butcontre+=score2;
*e2.butpour+=score2;
*e2.butcontre+=score1;
}
int main()
{
struct classement c;
//struct classement* c = (struct classement *) malloc(sizeof(struct classement));
c.e[0].point=0;
c.e[1].point=0;
c.e[0].nom="a";
c.e[1].nom="b";
match(&c.e[0],&c.e[1]);
if((c.e[0].point>c.e[1].point)||((c.e[0].point==c.e[1].point)&&((c.e[0].butpour-c.e[0].butcontre)>(c.e[1].butpour-c.e[1].butcontre)))) {
printf("%s %d\n",c.e[0].nom,c.e[0].point);
printf("%s %d\n",c.e[1].nom,c.e[1].point);
}
else {
printf("%s %d\n",c.e[1].nom,c.e[1].point);
printf("%s %d\n",c.e[0].nom,c.e[0].point);
}
}
Il me met comme erreur
request for member «nom» in something not a structure or union dans la fonction match
incompatible type for argument 2 of «match» dans le main en appelant la fonction
A voir également:
- Faire un classement en C
- Logiciel de classement de photos gratuit - Guide
- Logiciel de classement de documents gratuit - Télécharger - Bureautique
- Bp classement foot ✓ - Forum Excel
- Logiciel de chronométrage et classement gratuit - Télécharger - Sport
- Signification db classement foot - Forum Mobile
22 réponses
Bonjour, apparemment vous passez à la fonction match un pointeur vers la structure classement (&c.e[0]) alors qu'elle attend un pointeur vers une équipe (&e[0]).
Pas sur, mais je crois que c'est autour de cela qu'il faut chercher...
A+
Pas sur, mais je crois que c'est autour de cela qu'il faut chercher...
A+
Non on peut pas faire ca, le compilateur ne vas pas reconnaitre e appartenant à c;
Le mieux c'est peut d'être de mettre c en entrée sortie et le numero des équipes en entrée.
Le mieux c'est peut d'être de mettre c en entrée sortie et le numero des équipes en entrée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je pense que tu peux le faire comme ca
match attend une equipe*
void match(struct Equipe* e1,struct Equipe* e2)
or
c.e[0] est une équipe donc il faut lui passer l'adresse
match attend une equipe*
void match(struct Equipe* e1,struct Equipe* e2)
or
c.e[0] est une équipe donc il faut lui passer l'adresse
il me met toujours
request for member «nom» in something not a structure or union dans la fonction match
si je fais ca kazzouu
request for member «nom» in something not a structure or union dans la fonction match
si je fais ca kazzouu
pour la fonction match ca doit etre soit
printf("match %s contre %s",(*e1).nom,(*e2).nom);
soit
printf("match %s contre %s",(*e1)->nom,(*e2)->nom);
pas trop envi de sortir le compilateur =)
printf("match %s contre %s",(*e1).nom,(*e2).nom);
soit
printf("match %s contre %s",(*e1)->nom,(*e2)->nom);
pas trop envi de sortir le compilateur =)
en fait j'ai pas mis toute les erreurs c'est à chaque fois que j'utilise *e1 dans la fonction match que ca marque cette erreur
comme si il reconnait pas que c'est une structure
comme si il reconnait pas que c'est une structure
essai comme ca alors ce devrai marcher niquel
void match(struct Equipe* e1,struct Equipe* e2) {
int score1,score2;
printf("match %s contre %s",(*e1).nom,(*e2).nom);
scanf("%d",&score1);
scanf("%d",&score2);
(*e1).butpour+=score1;
(*e1).butcontre+=score2;
(*e2).butpour+=score2;
(*e2).butcontre+=score1;
}
void match(struct Equipe* e1,struct Equipe* e2) {
int score1,score2;
printf("match %s contre %s",(*e1).nom,(*e2).nom);
scanf("%d",&score1);
scanf("%d",&score2);
(*e1).butpour+=score1;
(*e1).butcontre+=score2;
(*e2).butpour+=score2;
(*e2).butcontre+=score1;
}
par contre j'aurais une question pratique
que me conseillez vous pour garder en mémoire tout les résultats de tout les matchs.
J'ai pensé à rajouter 1 tableau adversaire(pour savoir contre qui une equipe a déjà joué)
et une matrice pour enregistrer tout les resultats
j'ai pour but de tout enregistrer dans une base de donnée pour regarder à tout moment les scores des anciennes rencontres et comme j'ai jamais fait d'uml je sais pas trop comment faire.
que me conseillez vous pour garder en mémoire tout les résultats de tout les matchs.
J'ai pensé à rajouter 1 tableau adversaire(pour savoir contre qui une equipe a déjà joué)
et une matrice pour enregistrer tout les resultats
j'ai pour but de tout enregistrer dans une base de donnée pour regarder à tout moment les scores des anciennes rencontres et comme j'ai jamais fait d'uml je sais pas trop comment faire.
ouai ca sera pas trop lourd, un peu chiant à programmer avec des concatenations et deconcatenations de chaine
mais après ca ira
et c'est pas trop embettant non plus si j'ai envie de modifier mon programme, par exemple en faisant un tirage au sort pour savoir contre qui vont jouer les equipes.
mais après ca ira
et c'est pas trop embettant non plus si j'ai envie de modifier mon programme, par exemple en faisant un tirage au sort pour savoir contre qui vont jouer les equipes.
ca à l'air de marcher.
je dois juste me concentrer sur l'algorithme qui va s'occuper de calculer la position des equipes au classement selon les vrais regles de football et l'afficher.
je dois juste me concentrer sur l'algorithme qui va s'occuper de calculer la position des equipes au classement selon les vrais regles de football et l'afficher.
tu as juste a comparer le score que tu rentre dans la fonction match et a incrementer les points de chacune des deux equipes en fonction du score :)
void match(struct Equipe* e1,struct Equipe* e2) {
int score1,score2;
printf("match %s contre %s",(*e1).nom,(*e2).nom);
scanf("%d",&score1);
scanf("%d",&score2);
(*e1).butpour+=score1;
(*e1).butcontre+=score2;
(*e2).butpour+=score2;
(*e2).butcontre+=score1;
if(score1>score2)(*e1).score+=3;
if(score1<score2)(*e2).score+=3;
else {(*e1).score+=1;(*e1).score+=1;}
}
void match(struct Equipe* e1,struct Equipe* e2) {
int score1,score2;
printf("match %s contre %s",(*e1).nom,(*e2).nom);
scanf("%d",&score1);
scanf("%d",&score2);
(*e1).butpour+=score1;
(*e1).butcontre+=score2;
(*e2).butpour+=score2;
(*e2).butcontre+=score1;
if(score1>score2)(*e1).score+=3;
if(score1<score2)(*e2).score+=3;
else {(*e1).score+=1;(*e1).score+=1;}
}