CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[AIDE C] 2 errors, 4 warnings....[JEU]

infinity123
infinity123
Niveau 10
15 mai 2015 à 17:19:57

Bonjour à tous :hello:

Voilà, étant sur un jeu en console en C, j'ai un petit problème :oui:

Voici le code en question:

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define MAX_NOM 50
#define MIN_CARAC 1
#define MAX_CARAC 100


struct perso //définition d'une structure personnage avec toutes les caractéristiques
{
char nom[50];
int classe; //0: guerrier, 1: sorcier, 2: eclaireur
int corps, intellect, esprit; //caractéristiques principales
int endurance, pouvoir, habilete, adresse; //caractéristiques dérivées
int degats;
};
typedef struct perso sPerso; //utilisation de typedef pour alléger le programme

struct potion //définition d'une structure personnage avec toutes les caractéristiques
{
char nom[50];
int attribut; // intellect, corps, esprit
char symbole[50];
};
typedef struct potion sPotion; //utilisation de typedef pour alléger le programme


/*
    =================================
     Declaration des sous-programmes
    ================================= */

void Color(int couleurDuTexte,int couleurDeFond);
void afficherPerso(sPerso unPersonnage); //Déclaration du-sous-programme servant à afficher totues les informations de mon personnage
void saisirPerso(sPerso * unPersonnage); //Déclaration du sous-programme servant à saisir toutes les informations de mon personnage
int fontion_objet(sPerso *p, sPotion *po );

 /*

    =====================
     Main du code source
    ===================== */


int main()
{
sPerso monPersonnage;
saisirPerso(&monPersonnage);
afficherPerso(monPersonnage);
sPotion maPotion;
fonction_objet(&monPersonnage,&maPotion);

return 0;
}

/*
    ================================
     Definition des sous-programmes
    ================================ */


void saisirPerso(sPerso *p) //Définition de mon premier sous-programme
{
int c; //on crée une variable qui va nous servir à stocker le choix 0,1 ou 2
printf(" Entrer le nom de votre personnage \n "); //On demande d'afficher le nom du personnage
scanf("%s",(*p).nom); //On demande à l'utilisateur d'écrire son nom et on l'enregistre dans p.nom
do
{
printf("Choisissez vos classes parmi: \n 0 : Guerrier \n 1 : Sorcier \n 2 : Eclaireur "); //on fait choisir l'une des classes aux joueurs
scanf("%d",&c); //on stocke le choix de la classe dans la variable c
}

while((c < 0)||(c > 2)); //Boucle qui ne marche que si c est égal à soit 0,1 ou 2
srand(time(NULL)); //On initialise rand
(*p).classe=c;
(*p).corps=rand()%(10)+ 25; //La valeur de "Corps" sera un nombre entre 50 et 25
(*p).intellect=rand()%(15)+ 20; //La valeur de "Intellect" sera un nombre en 50 et 20
(*p).esprit=rand()%(15)+ 20; //La valeur de "Esprit" sera un nombre en 75 et 20
(*p).endurance=2*((*p).corps)+(*p).esprit; //On fait les calculs pour les caractéristiques secondaires
(*p).pouvoir=(*p).intellect+(*p).esprit; //Idem
(*p).habilete=(((*p).corps)+(*p).corps+(*p).intellect+(*p).esprit)/4; //Idem
(*p).adresse=((*p).corps+(*p).intellect)/2; //Idem
}


void afficherPerso(sPerso p) //Définition du second sous-programme
{
printf(" \n Voici: %s ", p.nom); // On affiche le nom stocké dans p.nom que l'utilisateur aura saisi auparavant
switch(p.classe) //swtich qui permet de savoir quelle valeur la variable c aura pris
{
case 0 : printf(" Le Guerrier \n "); //Si l'utilisateur clique sur 0, la variable c prendra cette valeur et il choisira donc la classe Guerrier
break;
case 1 : printf(" Le Sorcier \n "); //Idem pour le sorcier
break;
case 2 : printf(" L'Eclaireur \n "); //Idem pour l'Eclaireur
break;
default : printf("ERREUR : Classe inconue ! \n "); //on affiche un message d'erreur si la réponse indiquée n'est pas la bonne
}

printf(" Ses caracteristiques principales sont: \n "); //On affiche un message d'informations récapitulant les différentes caractéristiques
printf(" Corps: %d \n ", p.corps);
printf(" Intellect: %d \n ", p.intellect);
printf(" Esprit: %d \n ", p.esprit);
printf(" Ses caracteristiques derivees sont: \n "); //Idem pour les caractéristiques secondaires
printf(" Endurance: %d \n ", p.endurance);
printf(" Pouvoir: %d \n ", p.pouvoir);
printf(" Habilete: %d \n ", p.habilete);
printf("Adresse: %d \n ", p.adresse);

}




int fonction_objet(sPerso *p, sPotion *po)
{
    int d;
    printf("\nVous venez de trouver une potion !\n");

    printf("\n Quel symbole représente votre potion?\n");

    switch(po.symbole)
    {
        case 0 : printf("%c \n",21);
        break;
        case 1 : printf("\n $\n");
        break;
        case 2 : printf("\n s\n");
        break;
        default : printf("Symbole inconnu !\n");
    }


printf("Choisissez votre symbole: \n 0  \n 1 \n 2"); //on fait choisir l'une des classes aux joueurs
scanf("%d",&d); //on stocke le choix de la classe dans la variable c
p->habilete=(*p).habilete + 2;
p->endurance=(*p).endurance + 2;
p->adresse=(*p).adresse + 2;


if (d=0)
{
    (*p).habilete=p->habilete;
    printf("Vous venez de gagner de l'habilite ");
}
else if(d=1)
{
     (*p).endurance=p->endurance;
     printf("Vous venez de gagner de l'endurance ");
}
else(d=2)
{
     (*p).adresse=p->adresse;
     printf("Vous venez de gagner de l'adresse ");
}
}

void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
{
 HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
 SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
} 

Et avec ça, j'ai deux erreurs et 4 warnings:

|52|warning: implicit declaration of function 'fonction_objet' [-Wimplicit-function-declaration]|

|123|error : request for member 'symbole' in something not a structure or union|

|142|warning : suggest parentheses around assignment used as truth value [-Wparentheses]|

|147|warning : suggest parentheses around assignment used as truth value [-Wparentheses]|

|153|error : expected ';' before '{' token|

|157|warning: control reaches end of non-void function [-Wreturn-type]|

Build finished: 2 errors, 4 warnings (0 minutes, 0 seconds)

Je galère depuis 2heures à résoudre le problème :snif:

Merci d'avance !!

Candystand
Candystand
Niveau 10
15 mai 2015 à 17:37:44

|52|warning: implicit declaration of function 'fonction_objet' [-Wimplicit-function-declaration]|:

Tu as appelé ta fonction "fontion_objet" dans ta déclaration de fonctions

|123|error : request for member 'symbole' in something not a structure or union|

switch(po.symbole): tu dois mettre po->symbole, car ta structure est déclarée en tant que pointeur.

|142|warning : suggest parentheses around assignment used as truth value [-Wparentheses]|
|147|warning : suggest parentheses around assignment used as truth value [-Wparentheses]|

tu as mis d = 0 au lieu de d == 0 (pareil pour ce qui est ligne 147)

|153|error : expected ';' before '{' token|
else(d=2): tu devrais mettre un else if (d == 2)

|157|warning: control reaches end of non-void function [-Wreturn-type]|
ta fonction n'es pas déclarée en void, elle doit donc return quelque chose. En l'occurence ta fonction doit return un int, donc ici un return (0) fera l'affaire :)

JerryDayPonay
JerryDayPonay
Niveau 33
15 mai 2015 à 17:49:19

|52|warning: implicit declaration of function 'fonction_objet' [-Wimplicit-function-declaration]|

Quand tu déclares tes prototypes, ligne 37, il manque un 'c' au nom de la fonction.

|123|error : request for member 'symbole' in something not a structure or union|

po est de type sPotion*, c'est un pointeur. Tu dois écrire "(*p).symbole" ou plus simplement "po->symbole".

|142|warning : suggest parentheses around assignment used as truth value [-Wparentheses]|
|147|warning : suggest parentheses around assignment used as truth value [-Wparentheses]|
|153|error : expected ';' before '{' token|
|157|warning: control reaches end of non-void function [-Wreturn-type]|

  • Quand tu veux tester une égalité tu dois utiliser '==', si tu mets un seul '=' c'est une affectation.
  • "else(d=2)" ça n'existe pas, c'est soit "else if (d == 2)", soit "else" tout court.
  • Les lignes du genre :

(*p).adresse=p->adresse;
ne font strictement rien, tu écris la même chose de deux manières différentes.

  • Ta fonction doit retourner un entier.

Edit: Grillé :hap:

Message édité le 15 mai 2015 à 17:50:57 par JerryDayPonay
infinity123
infinity123
Niveau 10
15 mai 2015 à 17:57:42

Oh, merci mon Dieu :coeur:

Merci beaucoup !!!!!!!

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment