Salut à tous,
Je suis étudiant en première année de Technologie de l'Informatique en Belgique. Je m'entraine pour mes épreuves de fin d'année à manipuler les fichiers et les structures en C.
Voici le programme que je tente de réaliser.
Il s'agit d'un jeu "Random Game" qui offre la possibilité d'ajouter un joueur (pseudo,date de naissance et score), de jouer une nouvelle partie, d'afficher le fichier et tout les participants, afficher une aide.
Je rencontre quelques soucis. Je pense que c'est au niveau de "où" suis je et à quel moment dans mon fichier.
Liste des problèmes :
- Si j'ajoute un joueur, je ne peux pas jouer avec. Seul le premier joueur ajouter passe bien dans la fonction jeu().
- Lorsque je tente d'ajouter les 2 points au joueur une fois qu'il a gagner j'obtiens des résultat étrange dans game.score et game.dateN.
Mon Code :
Merci de votre aide,Code:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define v fflush(stdin) //Prototypes void menu(void); void ajout(void); void aide(void); void lecture(void); void jeu(void); int dateOjd; int anneeOjd; int moisOjd; int jourOjd; typedef struct { char pseudo[20]; int dateN; int score; }enrP; void main(void) { printf("\n============== Bienvenue ================\n"); printf("\nDate du jour (JJMMAAAA): "); v; scanf("%d",&dateOjd); anneeOjd=(dateOjd%10000); moisOjd=((dateOjd/10000)%100); jourOjd=(dateOjd/1000000); printf("Nous somme le %d/%d/%d\n\n",jourOjd,moisOjd,anneeOjd); menu(); printf("\n\nMerci d'avoir utiliser ce logiciel.\n"); printf("=========================================\n\n"); system("PAUSE"); } void menu(void) { int choix; printf("\n============== Random Game ==============\n"); printf("\nMENU:\n\n"); printf("1. Nouveau Joueur\n"); printf("2. Nouvelle Partie\n"); printf("3. Imprimer la liste\n"); printf("4. Aide\n"); printf("5. Quitter\n\n"); printf("\nVotre choix : "); v; scanf("%d",&choix); printf("\n"); switch(choix) { case 1: ajout(); break; case 2: jeu(); break; case 3: lecture(); break; case 4: aide(); break; case 5: break; default: menu(); break; } } void ajout(void) { FILE *pfich; enrP nouv; pfich=fopen("FiScores.dat","a"); printf("\n=========================================\n"); printf("\nEntrez le pseudo (max 20) : "); v; gets(nouv.pseudo); printf("\nDate de naissance (JJMMAAA): "); v; scanf("%d",&nouv.dateN); nouv.score=0; fwrite(&nouv,sizeof(enrP),1,pfich); fclose(pfich); printf("\n\n"); menu(); } void jeu(void) { FILE *pfich; enrP game; int flag=6,rep=0,nbr=0,vict=0; pfich=fopen("FiScores.dat","r+b"); char pseudoLu[20]; printf("Entrez votre Pseudo : "); v; scanf("%s",pseudoLu); fread(&game,sizeof(enrP),1,pfich); printf("\n\n%s,%d,%d\n\n",game.pseudo,game.score,game.dateN); while(strcmp(game.pseudo,pseudoLu)!=0) { fread(&game,sizeof(enrP),1,pfich); //On arrive directement dans le bon joueur ! } if(pfich==NULL) { printf("\n\nPseudo Inexistant !\n"); } else { printf("\n=========================================\n"); printf("\n%s vous avez %d Chances pour trouver le bon nombre compris entre 0 et 100 ! Vous avez actuellement %d points.\n\n",game.pseudo,flag,game.score); v; nbr=rand()%100+1; printf("|| La Matrice a generer un nombre ! A vous de jouer ... ||\n\n"); while(flag!=0) { printf("\n#>> "); v; scanf("%d",&rep); if(rep==nbr) { printf("\n\nVictoire %s ! 2 Points sont ajouter a votre Score.\n",game.pseudo); flag=0; game.score+=2; fwrite(&game,sizeof(enrP),1,pfich); } if(rep<nbr) { flag--; printf("\nPlus Grand ! Il vous reste %d essais.\n",flag); } if(rep>nbr) { flag--; printf("\nPlus Petit ! Il vous reste %d essais.\n",flag); } } } if(flag==-1) { printf("\n=========================================\n"); printf("\nC'est Perdu !\n"); } rewind(pfich); fclose(pfich); menu(); } void lecture() { FILE *pfich; enrP lect; int choixlecture,date,anneej,moisj,jourj,agej; printf("\n=========================================\n"); printf("\nContenu du fichier :\n"); pfich=fopen("FiScores.dat","r"); fread(&lect,sizeof(enrP),1,pfich); while(!feof(pfich)) { printf("\n\nPseudo : %s\n",lect.pseudo); date=lect.dateN; anneej=(date%10000); moisj=((date/10000)%100); jourj=(date/1000000); agej=(anneeOjd-anneej); if(moisOjd<moisj) { agej=agej-1; } else { if(moisOjd==moisj && jourOjd>jourj) { agej=agej; } else { agej=agej-1; } } printf("Date de naissance : %d/%d/%d\n",jourj,moisj,anneej); printf("Age : %d\n",agej); printf("Score : %d\n",lect.score); fread(&lect,sizeof(enrP),1,pfich); } fclose(pfich); printf("\n\n"); printf("1. Retour\n"); printf("2. Quitter le programme\n"); printf("\nVotre Choix : "); v; scanf("%d",&choixlecture); if(choixlecture==1) menu(); } void aide(void) { int choixaide; printf("=========================================\n"); printf("\nBienvenue dans l'aide...\n\n"); printf("Pour plus d'information contactez le codeur. <admin@gmail.com>\n\n"); printf("1. Retour\n"); printf("2. Quitter le programme\n"); printf("\nVotre Choix : "); v; scanf("%d",&choixaide); if(choixaide==1) menu(); }
-----