Rechercher : dans
Par :

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

Dernière réponse le 26 nov 2008 à 15:39:41 skiliss, le 26 nov 2008 à 09:56:16 
 Signaler ce message aux modérateurs

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;
                                 }
}              

Meilleures réponses pour « [Langage C]déplacer un struct dans une fonct° » dans :
Langage C++ - Les types de données Voir Les types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

Char Snipeur, le 26 nov 2008 à 10:06:39

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

2

skiliss, le 26 nov 2008 à 10:26:42

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 Qu'est ce qu'on serai mieux avec une machine a écrire !

Répondre à skiliss

3

Char Snipeur, le 26 nov 2008 à 11:16:34

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

4

skiliss, le 26 nov 2008 à 12:47:18

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");
                   }
}            
Qu'est ce qu'on serai mieux avec une machine a écrire !

Répondre à skiliss

5

lami20j, le 26 nov 2008 à 13:44:34

Salut,

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

scanf("%d",&tmp);


106485010510997108

Répondre à lami20j

6

 skiliss, le 26 nov 2008 à 15:39:41

Sa marche merci Qu'est ce qu'on serai mieux avec une machine a écrire !

Répondre à skiliss