kolorius | Bonjour à tous,
Je suis débutant en programmation et je dois réaliser un projet mais une erreur intervient dans mon programme et je ne vois vraiment pas comment la résoudre.
Il s'agit d'un "livre-jeu" et pour charger une partie, j'ai utilisé un fichier préalablement crée sauf que dans mon fichier il y a une chaîne de caractères limitée à 20 caractères et donc quand je fais mon fscanf je mets donc %s mais lorsque je met l'opérateur &, il me dit "format %s expects argument of type 'char *' but argument 2 has type char (*)[20]" donc j'ai essayé d'enlever cette limite (que j'avais défini en constante) pour voir mais ça me sort un tas d'erreurs évidemment...
Voici mon code source :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- /****************************************************************************************************
- Structures de donnees
- *****************************************************************************************************/
- #define MAX_NOM 20
- #define SAVE "save.txt"
- struct personnage
- {
- char pseudo[MAX_NOM];
- int habilete, endurance, chance;
- }personnage;
- typedef struct personnage sPerso;
- /****************************************************************************************************
- Declaration des fonctions secondaires
- *****************************************************************************************************/
- int lance_de(); // renvoie le resultat de .. lance(s) de dé
- void creation_avatar(sPerso* p); // demande un pseudo et genere les attributs de l'avatar
- void afficher_avatar(sPerso p); // affiche les attributs de l'avatar cree precedemment
- void sauvegarder(sPerso p, char nomF[]); // ecrit dans un fichier le pseudo et les attributs du dernier avatar cree
- void charger(sPerso *p, char nomF[]); // lit dans un fichier le pseudo et les attributs du dernier avatar cree
- /****************************************************************************************************
- Fonction principale
- *****************************************************************************************************/
- int main()
- {
- srand(time(NULL));
- sPerso p;
- printf("BIENVENUE!\n\n" );
- creation_avatar(&p);
- afficher_avatar(p);
- sauvegarder(p, SAVE);
- charger(&p, SAVE);
- afficher_avatar(p);
- return 0;
- }
- /****************************************************************************************************
- Definition des fonctions secondaires
- *****************************************************************************************************/
- int lance_de()
- {
- int x=0;
- x=x+(rand()%6)+1;
- return x;
- }
- void creation_avatar(sPerso* p) /*Creation de l'avatar*/
- {
- printf("Veuillez saisir votre pseudo : " );
- scanf("%s", (*p).pseudo);
- (*p).habilete=(6 + lance_de());
- (*p).endurance=(12 + lance_de() + lance_de());
- (*p).chance=(6 + lance_de());
- }
- void afficher_avatar(sPerso p) /*Affiche le pseudo et les attributs de l'avatar*/
- {
- printf("\n" );
- printf("Votre pseudo est : %s\n", (p.pseudo));
- printf("Votre habilete est de : %d\n", ((p.habilete)));
- printf("Votre endurance est de : %d\n", ((p.endurance)));
- printf("Votre chance est de : %d\n", ((p.chance)));
- }
- void sauvegarder(sPerso p, char nomF[])
- {
- FILE* fichier;
- if ((fichier=fopen(SAVE, "w" )) == NULL)
- {
- fprintf(stderr, "\nEchec a l'ouverture du fichier %s (mode w)!\n", SAVE);
- exit(0);
- }
- fprintf(fichier,"Votre pseudo est : %s\n",p.pseudo);
- fprintf(fichier,"Votre habilete est de : %d\n",p.habilete);
- fprintf(fichier,"Votre endurance est de : %d\n",p.endurance);
- fprintf(fichier,"Votre chance est de : %d\n",p.chance);
- fclose(fichier);
- }
- void charger(sPerso *p, char nomF[])
- {
- FILE* fichier;
- if ((fichier=fopen(SAVE, "r" )) == NULL)
- {
- fprintf(stderr, "\nEchec a l'ouverture du fichier %s (mode r)! \n", SAVE);
- exit(0);
- }
- fscanf(fichier,"%s",&((*p).pseudo)); //c'est ici que vient l'erreur, et si j'enleve le &, ca m'affiche "Votre pseudo est : Votre"
- fscanf(fichier,"%d",&((*p).habilete));
- fscanf(fichier,"%d",&((*p).endurance));
- fscanf(fichier,"%d",&((*p).chance));
- fclose(fichier);
- }
|
J'espère avoir été clair,
Merci d'avance. |