Bonjour à tous ,je suis débutant en C et j'essai de faire un début de jeu mais j'ai un problème le voici:
main :
choixNiveau(&categorie[5]);
.h:
void choixNiveau(enemie *categorie);
.c
void choixNiveau(enemie *categorie){
int bufRep=0;
printf("Choisi ton niveau :\nforet;/1/\nCave/2/\nVolcan/3/\nArreter le choix/0/");
scanf("%d",&bufRep);
for(int i=0;i<1;i++){
if (bufRep==1){printf("\nVous etes au niveau 1 ,une foret plutot paisible ,vous marchez lorsque vous recontrez un %s ,il a %d PV , %d points de degat et %d points de resistance",categorie[0].nom,categorie[0].pv,categorie[0].degat,categorie[0].resistance);}}
}
mais lorsque je compil mon %s se transforme en ? mais ca n'est pas voulu lorsque j'ai initialisé ma structure ca marchais pourtant bien :
void initialisation(enemie *categorie)
{
char name1[7]="Goblin",name2[4]="Orc",name3[6]="Troll",name4[10]="minotaure",name5[6]="golem";
int pv=10,degat=2,resistance=1;
for(int bufIndice=0; bufIndice<=5; bufIndice++)
{
categorie[bufIndice].pv=pv;
categorie[bufIndice].degat=degat;
categorie[bufIndice].resistance=resistance;
}
strcpy(categorie[0].nom,name1);
strcpy(categorie[1].nom,name2);
strcpy(categorie[2].nom,name3);
strcpy(categorie[3].nom,name4);
strcpy(categorie[4].nom,name5);
/*for(int bufIndice2=0;bufIndice2<=4;bufIndice2++){
printf("Son nom est %s\n",categorie[bufIndice2].nom);
printf("il a %d point de vie\n",categorie[bufIndice2].pv);
printf("il a %d point de degat\n",categorie[bufIndice2].degat);
printf("il a %d point de resistance\n",categorie[bufIndice2].resistance);}*/
}
quand je retire les /* */ il écrit parfaitement la 1ere case de mon tableau categorie[0] mais dans l'autre fonction choixNiveau ca ne marche pas, les autres case de ce tableau marche pourtant.
Ps je n'ai aucun warning
- Edité par Jefkanochard 15 janvier 2020 à 15:45:25
#include <stdio.h>
#include <stdlib.h>
#include "JeuA.h"
int main()
{
int bufIndice=0;
enemie categorie[5];
joueur player;
initialisation(&categorie[5]);
printf("Voulez-vous faire une partie ?/1=oui;0=non/");
scanf("%d",&bufIndice);
while (bufIndice==1){
// creationPerso(&player);
choixNiveau(&categorie[5]);
attaqueJoueur(&player,&categorie[5]);
printf("\nVoulez-vous faire refaire une partie ?/1=oui;0=non/");
scanf("%d",&bufIndice);
}
return 0;
}
fichier .h
#ifndef JEUA_H_INCLUDED
#define JEUA_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char nom[20];
int pv;
int degat;
int resistance;
}enemie;
typedef struct {
char pseudo[20];
char classe[20];
int PvJoueur;
int degatJoueur;
int resistanceJoueur;
}joueur;
int creationPerso (joueur *player);
void initialisation(enemie *categorie);//PS ENEMIE 1=ENEMIE 4 LE 2 =LE 4=5 ECT...
void attaqueJoueur(joueur *player,enemie *categorie);
void choixNiveau(enemie *categorie);
#endif // JEUA_H_INCLUDED
int creationPerso(joueur *player)
{
int bufRep=0,bufRep1=0;
char nameClasse1[9]="Guerrier",nameClasse2[9]="Assassin";
do
{
printf("Quel est ton pseudo?\n");
scanf("%s",player->pseudo);
printf("%s,c'est bien ca?\n(1/oui 2/non)",player->pseudo);
scanf("%d",&bufRep);
}
while (bufRep!=1);
printf("Choisi ta classe \nGuerrier/1/\nAssassin/2/\nAnuler la creation/0/\n");
scanf("%d",&bufRep1);
if (bufRep1==1)
{
player->PvJoueur=20;
player->resistanceJoueur=5;
player->degatJoueur=5;
strcpy(player->classe,nameClasse1);
printf("Tu es un %s ,tu as %d PV ,%d Points de degat et %d points de resistance et tu te nomme %s",player->classe,player->PvJoueur,player->degatJoueur,player->resistanceJoueur,player->pseudo);//printf qui beug
}
return 0;
}
void initialisation(enemie *categorie)
{
char name1[7]="Goblin",name2[4]="Orc",name3[6]="Troll",name4[10]="minotaure",name5[6]="golem";
int pv=10,degat=2,resistance=1;
for(int bufIndice=0; bufIndice<=5; bufIndice++)
{
categorie[bufIndice].pv=pv;
categorie[bufIndice].degat=degat;
categorie[bufIndice].resistance=resistance;
}
strcpy(categorie[0].nom,name1);
strcpy(categorie[1].nom,name2);
strcpy(categorie[2].nom,name3);
strcpy(categorie[3].nom,name4);
strcpy(categorie[4].nom,name5);
for(int bufIndice2=0;bufIndice2<=4;bufIndice2++){
printf("Son nom est %s\n",categorie[bufIndice2].nom);
printf("il a %d point de vie\n",categorie[bufIndice2].pv);
printf("il a %d point de degat\n",categorie[bufIndice2].degat);
printf("il a %d point de resistance\n",categorie[bufIndice2].resistance);}
}
void choixNiveau(enemie *categorie){
int bufRep=0;
printf("Choisi ton niveau :\nforet;/1/\nCave/2/\nVolcan/3/\nArreter le choix/0/");
scanf("%d",&bufRep);
for(int i=0;i<1;i++){
if (bufRep==1){printf("\nVous etes au niveau 1 ,une foret plutot paisible ,vous marchez lorsque vous recontrez un %s ,il a %d PV , %d points de degat et %d points de resistance",categorie[0].nom,categorie[0].pv,categorie[0].degat,categorie[0].resistance);}}
}
void attaqueJoueur(joueur *player,enemie *categorie){};
- Edité par Jefkanochard 17 janvier 2020 à 13:13:36
Dans un format, le caractère % a un rôle spécial, il indique le début d'une spécification, comme dans
printf("deux et deux font %d", 5);
Pour le déspecialiser, il faut le doubler
printf("100%% d'accord");
Ps c'est un rôle tenu pendant l'EXECUTION de printf, contrairement aux antislash \ qui despecialisent pendant la compilation, au niveau notation des chaînes en C
edit: c'est hors sujet, j'ai cru voir un % tout seul dans un format. c'était le matin, j'avais pas mes lunettes.
- Edité par michelbillaud 17 janvier 2020 à 14:33:48
Tu n'aurais pas un problème pour envoyer l'adresse de tes tableaux aux fonctions ?
Ex : ligne 6 du main.c tu envoies l'adresse de la 6ème case du tableau et donc dans la fonction tu débordes puisque tu traites le nombre de case de ton tableau. (tu devrais d'ailleurs passer le nombre de cases du tableau comme paramètre aux fonctions).
Il y a { suivi de } et ; ... Je doute que tu puisses compiler correctement.
Il faudra que je refasse les copier-coller dans le bon ordre pour éviter des erreurs de définition.
Tu as oublié les #include pour stdio.h et string.h
En effet et je l'est rajouter
rouloude a écrit:
Tu n'aurais pas un problème pour envoyer l'adresse de tes tableaux aux fonctions ?
Ex : ligne 6 du main.c tu envoies l'adresse de la 6ème case du tableau et donc dans la fonction tu débordes puisque tu traites le nombre de case de ton tableau. (tu devrais d'ailleurs passer le nombre de cases du tableau comme paramètre aux fonctions).
C'est une erreur mais ca ne viens pas de la car j'avais le bug avant et j'ai modifié pour voir si ca arrangait
- Edité par Jefkanochard 17 janvier 2020 à 13:15:00
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.