Creation et lecture d'un fichier typé en C

Signaler
Messages postés
250
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
4 décembre 2013
-
Messages postés
250
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
4 décembre 2013
-
Bonjour ,
voilà j'ai un projet de Mastermind à rendre bientôt et je coince sur une partie du code notamment sur l'enregistrement ! l'idée c'est que le joueur pourra interrompre à tout moment et sauvegarder le jeu en tapant SAVE !! poue cela j'ai pensé à créer un structure et sauvegarder las infos nécessaires pour le joueur : notons que le jeu se déroule en tapant une série de 5 lettres et selon le resultat : l'écran doit afficher le nombre de bien placé et mal placé jusqu'à ce qu'on a trouvé la bonne combinaison (qui est determiné aléatoirement ) pour l'enregistrement alors , je pensais qu'il faut retenir : nom - prenom et surtout la série de combinaison à chercher voici : une partiedu code:
#ifndef ENREGISTRERPARTIE_C_INCLUDED
#define ENREGISTRERPARTIE_C_INCLUDED
#include<stdio.h>
#include<stdlib.h>
#include"Prototype.h"
#include<string.h>

/*********************************
* la Structure 
*********************************/
// pour le fichier Enregistrement
typedef struct Telement
{
    char TablStock[6]; // stocke les combinaisons à chercher
    char nom [10]; // peremettant de distinguer le joeur
    char prenom[10];

} Element ;



/**************************************
*  PROCEDURE ENREGISTREMENT PARTIE ************
***************************************/


void EnregistrerPartie(char TableauStock[6],char nom[15] , char prenom[15])
{
    FILE * fichier =  NULL;
    // char nom [20];
    //char prenom [20];
    int trouve = 0;
    Element var;
    int c;

    /**********************************************
    *********************************************
    fichier = fopen("FichierEnregistrement.typ", "a+" );
    OUVERTURE D'UN FICHIER TYPÉ
    ***********************************************/
    fichier  = fopen("Enreg.typ","r+");


    if(fichier==NULL)
    {
       fprintf(stderr,"Impossible d'ouvrir le fichier\n");


    }
    else
    {



        //printf("Nom :"); scanf("%s",nom);
        //printf("Prenom :"); scanf("%s",prenom);
        fread(&var,sizeof(Element),1,fichier);

    //while(!feof(fichier)&&(trouve==0))
    while(((c=fgetc(fichier)) != EOF)&&(trouve==0))
    {

        if((strcasecmp(var.nom,nom)==0)&&(strcasecmp(var.prenom,prenom)==0))
        {
            trouve = 1;
            //var.proposition = propo;
            // var.trouve = nbretrouve;
            //strcpy(var.TablFinal,TableauFinal);
            strcpy(var.TablStock,TableauStock);
            fwrite(&var,sizeof(Element),1,fichier);

            printf("Partie enregistrée!!\n");
        }
        else
        {
            fread(&var,sizeof(Element),1,fichier);
        }


    }
    // s'il n'existe pas dans le fichier on le cree
    if(trouve==0)
    {
        // on place dans la fin de fichier
        fseek(fichier,1,SEEK_END);
        /*//////////////////*/


        strcpy(var.nom , nom);
        strcpy( var.prenom , prenom);
        // var.proposition = propo;
        // var.trouve = nbretrouve;
        // strcpy(var.TablFinal,TableauFinal);
        strcpy(var.TablStock,TableauStock);
        // on insère dans le fichier
        fwrite(&var,sizeof(Element),1,fichier);
        printf("Partie enregistrée!!\n");

    }
    }

    fclose(fichier);

}


void LireFichier()
{
    FILE *fvar=NULL;
    Element var;
    int c;

    fvar = fopen("Enreg.typ","r");
    if(fvar==NULL)
    {
        printf("Impossible d'ouvrir le fichier \n");
    }

    else
    {
        fread(&var,sizeof(Element),1,fvar);
        //while(!feof(fvar))
        while((c=fgetc(fvar)) != EOF)
        {
            printf("nom :  %s",var.nom);
            printf("\n");
            printf("prenom :  %s",var.prenom);
            printf("\n");
            printf("case recherchee:  %s",var.TablStock);
            printf("\n");
            fread(&var,sizeof(Element),1,fvar);

        }
    }

    fclose(fvar);
}



#endif // ENREGISTRERPARTIE_C_INCLUDED



mon premier problème , c'est sur le mode d'ouverture est ce que a+ serait adéquat , car l'idée c'est que si le joueur est déjà dans la base , seule la combinaison sera modifiée sinon on l'ajoute (soit en fin de fichier )
mon deuxième problème c'est comment présente -t-on pour ce genre de problème s'agit il d'un fichier texte ou binaire (je ne sais pas trop distinguer les deux )
et ma troisième demande c'est que si vous étiez à ma place , comment vous le fairez pour faciliter les choses !!
car après avoir compiler çà ; le resultat n'est pas du tout conforme aux attentes

nom :  jean
prenom :  ludovic
case recherchee:  RBJBN
nom :  ULIO
prenom :  Ebastien
case recherchee:  BJBN
nom :  LIO
prenom :  DOVIC
case recherchee:  JBN
nom :  isca
prenom :  mihone
case recherchee:  LBV
nom :  isca
prenom :  mihone
case recherchee:  BBL
nom :  sca
prenom :  ihone
case recherchee:  NR
nom :  o
prenom :  vic
case recherchee:  N
nom :  
prenom :  
case recherchee:  

Process returned 0 (0x0)   execution time : 5.973 s
Press ENTER to continue.





comme vous pouvez le voir seule la première affichage est juste : jean ludovic mais après la suite : il coupe soit le nom ou le prenom et aussi la combinaison et remarquer à la fin
exemple : Ebastien au lieu de Sebastien
 nom :  
prenom :  
case recherchee: 

repète encore alors qu'il n'y a plus d'élement !!

2 réponses

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Sans trop regarder si ton algo est bon, le prototype de la fonction enregistré est moche !

Fais soit :
void EnregistrerPartie(char *TableauStock,char *nom , char *prenom);

Soit
void EnregistrerPartie(Element joueuraenregistrer);

Pour voir ce que ne vas pas édite ton fichier de sauvegarde (avec notepade) pour voir ce qui pourrait clocher.
Messages postés
250
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
4 décembre 2013

on n' a pas le droit d'utiliser un pointeur dans ce projet en plus un tableau et un pointeur c'est à peu près la même chose non !!