[Langage C]déplacer un struct dans une fonct°

Résolu/Fermé
skiliss Messages postés 168 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 20 avril 2012 - 26 nov. 2008 à 09:56
skiliss Messages postés 168 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 20 avril 2012 - 26 nov. 2008 à 15:39
Bonjour,
Mon problème est que je n'arrive pas a déplacer une structure d'un fonction a une autre en langage C.
main.h
#include <stdio.h>
#include <stdlib.h>
typedef struct groupe groupe;
struct groupe
{
            char nom[20];
            int attaque;
            int PV;

};

main.c
#include <stdio.h>
#include <stdlib.h>
#include "main.h" 

int main(int argc, char *argv[])
{
    groupe joueur1[4];// création d'un variable groupe 1
    groupe joueur2[4]; //création d'une variable groupe 2
}

void metier(int *s,groupe *joueur1)
{
int m;
printf("Choisissez votre metier :\n");
                          printf("1.Guerrier\n");
                          printf("2.Mage\n");
                          printf("3.Pretre\n\n");
                          scanf("%d",m);
                          switch(m)
                          {
                                 case 1: 
                                      joueur1[s]->attaque=joueur1[s]->attaque;
                                 break;
                                 }
}              
A voir également:

6 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
26 nov. 2008 à 10:06
salut.
je ne comprend rien à ce que tu fait.
met le tyedef après la définition de la structure déjà.
Ensuite, dans métier, si joueur1 est de type "groupe*" alors joueur1[*s] (s est de type "int*" donc joueur1[s] ne fait pas ce que tu attend) est de type "groupe" ce qui n'est pas un type pointeur, donc tu n'as aucune raison d'utiliser l'opérateur "->" !
Une bonne révision de la notion de pointeur me semble nécessaire pour ton cas !
Ou alors n'y touche pas.
0
skiliss Messages postés 168 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 20 avril 2012 14
26 nov. 2008 à 10:26
merci sa me fait avancer mais sa donne d'autre erreur
j'ai maintenant l'erreur "invalid type of 'unary*'
void metier(int *s, groupe *joueur1)
{
int m;
printf("Choisissez votre metier :\n");
                          printf("1.Guerrier\n");
                          printf("2.Mage\n");
                          printf("3.Pretre\n\n");
                          scanf("%d",m);
                          switch(m)
                          {
                                 case 1: 
                                      (*joueur1[*s]).attaque = (*joueur1[*s]).attaque + 2;
                                      
                                 break;
                          }
}                          

je révise aussi les pointeurs
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
26 nov. 2008 à 11:16
continue à bien réviser alors ! La réponse est dans ce que je t'ai dit avant, si joueur1 est de type "groupe*", alors joueur1[*s] est de type "groupe", et *joueur[*s] n'a donc aucun sens ! C'est comme écrire int a=3;*a=5;a=*4; c'est ppour ça que le compilateur râle. c'est dire que joueur1[*s].attaque suffit.
0
skiliss Messages postés 168 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 20 avril 2012 14
26 nov. 2008 à 12:47
c'est bon j'ai modifier et cela fonctionnne mais j'ai encore un souci (il compile, le début fonctionne puis sa plante)
void met(int *s,groupe *joueur1)
{
int tmp;
printf("Choisissez votre metier :\n");
printf("1.Guerrier\n");
printf("2.Mage\n");
printf("3.Pretre\n\n");
scanf("%f",tmp);
              if(tmp == 1)
              {
                  
                   printf("%d Pa\n",(joueur1[*s]).attaque);
                   (joueur1[*s]).attaque += 2;
               }
                   else 
                   {
                       printf("rien");
                   }
}            
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
26 nov. 2008 à 13:44
Salut,

Remplace scanf("%f",tmp); avec
scanf("%d",&tmp);


0
skiliss Messages postés 168 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 20 avril 2012 14
26 nov. 2008 à 15:39
sa marche merci
0