Program qui lit dans un fichier ne marche pas

Résolu/Fermé
M@teo - 14 avril 2012 à 18:57
 M@teo - 15 avril 2012 à 20:35
Bonjour à tout le monde,
Je viens de commencer à apprendre à programmer en C avec Code::Blocks sous Windows 7, et je viens juste de voir comment écrire dans un fichier. J'ai essayé de faire le programme suivant, mais il ne marche pas, quelqu'un pourrait-il m'aider s'il vous plait?
Dossier source
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
#define TAILLE_MAX_CHAINE 100
int main(int argc, char *argv[])
{
//On demande le nombre de joueurs
Personne joueur[100];
int i=0, compteur=0;
for (i=0; i<100; i++)
{
Initialiser_structure_Personne(&joueur[compteur]);
compteur++;
}
int nombre_de_joueurs=0;
i=0;
compteur=0;
do
{
printf("Combien y a-t-il de joueurs (100 max, 1 min)? ");
scanf("%d", &nombre_de_joueurs);
}while (nombre_de_joueurs<1||nombre_de_joueurs>100);
//demande les infos sur le(s) joueur(s)
for (i=0; i<nombre_de_joueurs; i++)
{
compteur++;
printf("\nJoueur %d\n", compteur);
joueur[i]=Infos_joueur();
}
compteur=0;
//stocker les infos reçues
FILE *fichier_infos_joueurs=NULL;
fichier_infos_joueurs=fopen("infos joueurs.txt", "w+");
fprintf(fichier_infos_joueurs, "Infos sur les joueurs\n");
fclose(fichier_infos_joueurs);
for (i=0; i<nombre_de_joueurs; i++)
{
compteur++;
fichier_infos_joueurs=fopen("infos joueurs.txt", "a");
fprintf(fichier_infos_joueurs,"\nJoueur %d", compteur);
fclose(fichier_infos_joueurs);
stocke_infos_joueurs(joueur[i]);
}
compteur=0;
//Affiche les infos sur le(s) joueur(s)
for(i=0; nombre_de_joueurs>i; i++)
{
compteur++;
Affiche_infos(compteur);
}
compteur=0;
return 0;
}
Header:
#ifndef DEF_MAIN
#define DEF_MAIN
#define TAILLE_MAX_CHAINE 100
typedef struct Personne Personne;
struct Personne
{
char prenom[100];
char nom[100];
int age;
char ville[100];
char adresse[100];
};
void Initialiser_structure_Personne(Personne* joueur);
Personne Infos_joueur();
void stocke_infos_joueurs(const Personne joueur_temp);
void Affiche_infos(const int numero_joueur);
Personne Recherche_infos_joueurs(const int numero_joueur);
//Initialiser la structure Personne
void Initialiser_structure_Personne(Personne* joueur)
{
(*joueur).age = 0;
}
//definit les infos sur un personnage
Personne Infos_joueur()
{
Personne joueur_temporel;
printf("Votre prenom: ");
scanf("%s", joueur_temporel.prenom);
printf("%s comment? %s ", joueur_temporel.prenom, joueur_temporel.prenom);
scanf("%s", joueur_temporel.nom);
printf("Quel est votre age %s %s? ", joueur_temporel.prenom, joueur_temporel.nom);
scanf("%d", &joueur_temporel.age);
printf("Vous habitez a (ville): ");
scanf("%s", joueur_temporel.ville);
printf("Votre adresse est: ");
scanf("%s", joueur_temporel.adresse);
return joueur_temporel;
}
//Stocke les infos su un joueur
void stocke_infos_joueurs(const Personne joueur_temp)
{
FILE *fichier_infos_joueurs=NULL;
fichier_infos_joueurs=fopen("infos joueurs.txt", "a");
fprintf(fichier_infos_joueurs, "\nPrenom\n%s\nNom\n%s\nAge\n%d\nVille\n%s\nAdresse\n%s\n", joueur_temp.prenom, joueur_temp.nom, joueur_temp.age, joueur_temp.ville, joueur_temp.adresse);
fclose(fichier_infos_joueurs);
}
//affiche les infos sur un joueur
void Affiche_infos(const int numero_joueur)
{
Personne joueur;
joueur=Recherche_infos_joueurs(numero_joueur);
printf("\nFiche d'identite\n=================\nNom: %s\nPrenom: %s\nAge: %d\nVille: %s\nAdresse: %s\n\n", joueur.nom, joueur.prenom, joueur.age, joueur.ville, joueur.adresse);
}
//Rechereche les infos sur un joueur
Personne Recherche_infos_joueurs(const int numero_joueur)
{
FILE *fichier_infos_joueurs=NULL;
Personne joueur;
char chaine_temp[TAILLE_MAX_CHAINE]="",message_numero_joueur[TAILLE_MAX_CHAINE]="";
sprintf(message_numero_joueur,"Joueur %d", numero_joueur);
fichier_infos_joueurs=fopen("infos joueurs.txt", "r");
while(strcmp(chaine_temp , message_numero_joueur)!=0)
{
fgets(chaine_temp,TAILLE_MAX_CHAINE, fichier_infos_joueurs);
}
//Recherche le prenom
while(strcmp(chaine_temp , "Prenom\n")!=0)
{
fgets(chaine_temp,TAILLE_MAX_CHAINE, fichier_infos_joueurs);
}
fscanf(fichier_infos_joueurs, "%s", &joueur.prenom);
//Recherche le Nom
while(strcmp(chaine_temp , "Nom\n")!=0)
{
fgets(chaine_temp,TAILLE_MAX_CHAINE, fichier_infos_joueurs);
}
fscanf(fichier_infos_joueurs, "%s", &joueur.nom);
//recherche l'age
while(strcmp(chaine_temp , "Age\n")!=0)
{
fgets(chaine_temp,TAILLE_MAX_CHAINE, fichier_infos_joueurs);
}
fscanf(fichier_infos_joueurs, "%d", &joueur.age);
//Recherche la ville
while(strcmp(chaine_temp , "Ville\n")!=0)
{
fgets(chaine_temp,TAILLE_MAX_CHAINE, fichier_infos_joueurs);
}
fscanf(fichier_infos_joueurs, "%s", &joueur.ville);
//Recherche l'adresse
while(strcmp(chaine_temp , "Adresse\n")!=0)
{
fgets(chaine_temp,TAILLE_MAX_CHAINE, fichier_infos_joueurs);
}
fscanf(fichier_infos_joueurs, "%s", &joueur.adresse);
return joueur;
}
#endif
Les erreur:
main.h||In function 'Recherche_infos_joueurs':|
main.h|80|warning: format '%s' expects type 'char *', but argument 3 has type 'char (*)[100]'|
main.h|87|warning: format '%s' expects type 'char *', but argument 3 has type 'char (*)[100]'|
main.h|101|warning: format '%s' expects type 'char *', but argument 3 has type 'char (*)[100]'|
main.h|108|warning: format '%s' expects type 'char *', but argument 3 has type 'char (*)[100]'|
main.c|15|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'|
||=== Build finished: 1 errors, 4 warnings ===|
Merci d'avance!
A voir également:

2 réponses

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
14 avril 2012 à 20:27
Bonjour,
dans les scanf exemple : &joueur.prenom << le &, prenom et les autres signalés L80,87,101,108 dans les warning sont des tableaux soit vous utilisez uniquement joueur.prenom ou soit &joueur.prenom[0] pour passer l'adresse du tableau.
Pour l'erreur essayez de remplacer :
Initialiser_structure_Personne(&joueur[compteur]);
par un truc comme ça :
joueur[compteur].age = 0;
0
Bonsoir,
j'ai finalement trouvé la solution, merci quand même.
0