[Aide][C]Mise à jour dans un Fichier !
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

[Aide][C]Mise à jour dans un Fichier !



  1. #1
    invite4f00587c

    Question [Aide][C]Mise à jour dans un Fichier !


    ------

    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 :
    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();
    }
    Merci de votre aide,

    -----

  2. #2
    Jack
    Modérateur

    Re : [Aide][C]Mise à jour dans un Fichier !

    - Si j'ajoute un joueur, je ne peux pas jouer avec. Seul le premier joueur ajouter passe bien dans la fonction jeu().
    J'ai testé ton code et si je donne le pseudo du 2ème joueur par exemple, c'est bien lui qui est sélectionné dans le fichier.

    - 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
    Ca me semble normal, puisqu'une fois que tu as localisé le joueur dans le fichier, le pointeur de fichier a avancé et est passé à l'enregistrement suivant. Donc lorsque tu veux écrire les 2 points supplémentaires, tu n'écris plus au bon endroit. Utilise fseek().

    A+

Discussions similaires

  1. mise à jour fichier html créé à partir d'un modèle
    Par invite97ef6aa5 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 25/12/2009, 17h07
  2. Mise à jour du fichier mif sous Quartus II
    Par invite7f5d7e23 dans le forum Électronique
    Réponses: 10
    Dernier message: 20/03/2009, 14h34
  3. Kicad + mise à jour fichier Pcbnew
    Par invitedb349605 dans le forum Électronique
    Réponses: 3
    Dernier message: 05/02/2009, 20h42
  4. Mise à jour avast fichier corrompu
    Par inviteb88e7c48 dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 13/07/2006, 21h46
  5. aide mise à jour bios CM
    Par zdep dans le forum Matériel - Hardware
    Réponses: 5
    Dernier message: 23/10/2003, 17h17