[Aide]Langage C - Lecture dans un fichier
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

[Aide]Langage C - Lecture dans un fichier



  1. #1
    invite4f00587c

    Post [Aide]Langage C - Lecture dans un fichier


    ------

    Bonsoir,

    Je suis Gaëtan, étudiant un technologie de l'informatique en Belgique.

    Dans une série d'exercice sur les fichiers je rencontre un petit soucis. Peu-être pourrez-vous m'aider.

    Problème : Je n'arrive pas à fair ela lecture de mon fichier (fin du code). Des idées, conseils ?

    Voici mon programme :

    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #define vb fflush(stdin);
    #define N 20
    
    typedef struct enrP
    {
    	char pseudo[N];
    	int score;
    	int dateN;
    }enrP;
    
    int main(void)
    {
    	enrP nouv; //Variable nouv de type enrP
    	char rep[4];
    	FILE *ptrFic=fopen("FiScore.dat","w");		//Ouverture du fichier
    	if(ptrFic==NULL)	//Toujours vérifier qu'il est différent de NULL
    	{
    		puts("Erreur - Memoire manquante !");
    	}
    	else
    	{
    		printf("*****************************************\n");
    		printf("******* Jeu de la mort qui tue ! ********\n");
    		printf("*****************************************");
    		printf("\nVoullez-vous ajouter un joueur ? (oui/non) ");
    		gets(rep);
    		vb;
    		while(strcmp(rep,"oui")==0)
    		{
    			puts("\nPseudo : ");
    			gets(nouv.pseudo);
    			vb;
    			puts("\nDate de naissance (JJMMAAAA) : ");
    			scanf("%d",&nouv.dateN);
    			nouv.score=0;
    			fwrite(&nouv,sizeof(enrP),1,ptrFic);
    			printf("\nVoullez-vous ajouter un joueur ? (oui/non) ");
    			vb;
    			gets(rep);
    		}
            FILE *ptrFic=fopen("FiScore.dat","r");
    	fread(&enrP,sizeof(enrP),1,ptrFic);
            while(!feof(pfich))
            {
            printf("%s\n%d\n\n",nouv.peseudo,nouv.dateN);
            fread(&enrP,sizeof(enrP),1,ptrFic);
            }
    	}
    	fclose(ptrFic);
    	system("PAUSE");
    }
    Merci pour votre aide,

    -----

  2. #2
    invite4492c379

    Re : [Aide]Langage C - Lecture dans un fichier

    Hello,

    une simple compil me donne les erreurs suivantes :

    Code:
    rouch.c: In function ‘main’:
    rouch.c:41:9: error: expected expression before ‘enrP’
    rouch.c:41:9: error: too few arguments to function ‘fread’
    /usr/include/stdio.h:702:15: note: declared here
    rouch.c:42:15: error: ‘pfich’ undeclared (first use in this function)
    rouch.c:42:15: note: each undeclared identifier is reported only once for each function it appears in
    rouch.c:43:31: error: ‘enrP’ has no member named ‘peseudo’
    rouch.c:44:13: error: expected expression before ‘enrP’
    rouch.c:44:13: error: too few arguments to function ‘fread’
    /usr/include/stdio.h:702:15: note: declared here
    rouch.c:40:8: warning: unused variable ‘ptrFic’
    rouch.c:49:1: warning: control reaches end of non-void function
    As-tu essayé de les résoudre ?
    Comprends-tu l'erreur faite en ligne 41 «error: expected expression before ‘enrP’» concernant :
    fread(&enrP, sizeof(enrP), 1, ptrFic);
    ?

  3. #3
    invite4f00587c

    Post Re : [Aide]Langage C - Lecture dans un fichier

    J'ai corrigé une grande partie des erreurs, il m'en reste une :-/

    Erreurs :
    E:\IESN\Langage C\Labo\Série 6 - Fichiers\S6_Ex2\main.cpp: In function 'int main()':
    E:\IESN\Langage C\Labo\Série 6 - Fichiers\S6_Ex2\main.cpp:45: error: expected primary-expression before ',' token
    E:\IESN\Langage C\Labo\Série 6 - Fichiers\S6_Ex2\main.cpp:49: error: expected primary-expression before ',' token

    Process terminated with status 1 (0 minutes, 0 seconds)
    2 errors, 0 warnings

    Je ne vois pas où il me manque une "," dans ce code au niveau des fread(...); 0.o

    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #define vb fflush(stdin);
    #define N 20
    
    typedef struct enrP
    {
    	char pseudo[N];
    	int score;
    	int dateN;
    }enrP;
    
    int main(void)
    {
    	enrP nouv; //Variable nouv de type enrP
    	char rep[4];
    	FILE *ptrFic=fopen("FiScore.dat","w");		//Ouverture du fichier
    	if(ptrFic==NULL)	//Toujours vérifier qu'il est différent de NULL
    	{
    		puts("Erreur - Memoire manquante !");
    	}
    	else
    	{
    		printf("*****************************************\n");
    		printf("******* Jeu de la mort qui tue ! ********\n");
    		printf("*****************************************");
    		printf("\nVoullez-vous ajouter un joueur ? (oui/non) ");
    		gets(rep);
    		vb;
    		while(strcmp(rep,"oui")==0)
    		{
    			puts("\nPseudo : ");
    			gets(nouv.pseudo);
    			vb;
    			puts("\nDate de naissance (JJMMAAAA) : ");
    			scanf("%d",&nouv.dateN);
    			nouv.score=0;
    			fwrite(&nouv,sizeof(enrP),1,ptrFic);
    			printf("\nVoullez-vous ajouter un joueur ? (oui/non) ");
    			vb;
    			gets(rep);
    		}
            FILE *ptrFic=fopen("FiScore.dat","r");
    		fread(&enrP,sizeof(enrP),1,ptrFic);
            while(!feof(ptrFic))
            {
            printf("%s\n%d\n\n",nouv.pseudo,nouv.dateN);
            fread(&enrP,sizeof(enrP),1,ptrFic);
            }
    	}
    	fclose(ptrFic);
    	system("PAUSE");
    }

  4. #4
    invite4492c379

    Re : [Aide]Langage C - Lecture dans un fichier

    Tu utilises quel compilateur ? Il y a toujours d'autres erreurs :

    Code:
    rouch.c: In function ‘main’:
    rouch.c:41:9: error: expected expression before ‘enrP’
    rouch.c:41:9: error: too few arguments to function ‘fread’
    /usr/include/stdio.h:702:15: note: declared here
    rouch.c:44:13: error: expected expression before ‘enrP’
    rouch.c:44:13: error: too few arguments to function ‘fread’
    /usr/include/stdio.h:702:15: note: declared here
    rouch.c:49:1: warning: control reaches end of non-void function
    fread(&enrP,sizeof(enrP),1,ptrFic);

    c'est quoi enrP ???

  5. A voir en vidéo sur Futura
  6. #5
    invite4f00587c

    Post Re : [Aide]Langage C - Lecture dans un fichier

    J'utilise le compilateur par défaut de Code:Block (GNU GCC Compiler)

    enrP (Enregistrement Player) est définis dans le typedef de ma structure ici ...

    Code:
    typedef struct enrP
    {
    	char pseudo[N];
    	int score;
    	int dateN;
    }enrP;

  7. #6
    invite4492c379

    Re : [Aide]Langage C - Lecture dans un fichier

    Que représente &enrP ????

    Quel doit être le premier paramètre de fread ?

  8. #7
    invite4f00587c

    Post Re : [Aide]Langage C - Lecture dans un fichier

    Théorie :
    Le premier argument déterminera dans quelle variable les données lues seront stockées (Trouvé sur internet)
    ou
    Le premier argument est l'adresse de la donnée à lire. (Mon cours)

    J'ai essayer comme cela, je n'ai plus d'erreur mais la console ne m'affiche pas le contenu du fichier.

    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #define vb fflush(stdin);
    #define N 20
    
    typedef struct enrP
    {
    	char pseudo[N];
    	int score;
    	int dateN;
    }enrP;
    
    int main(void)
    {
    	enrP nouv; //Variable nouv de type enrP
    	char rep[4];
    	FILE *ptrFic=fopen("FiScore.dat","w");		//Ouverture du fichier
    	if(ptrFic==NULL)	//Toujours vérifier qu'il est différent de NULL
    	{
    		puts("Erreur - Memoire manquante !");
    	}
    	else
    	{
    		printf("*****************************************\n");
    		printf("******* Jeu de la mort qui tue ! ********\n");
    		printf("*****************************************");
    		printf("\nVoullez-vous ajouter un joueur ? (oui/non) ");
    		gets(rep);
    		vb;
    		while(strcmp(rep,"oui")==0)
    		{
    			puts("\nPseudo : ");
    			gets(nouv.pseudo);
    			vb;
    			puts("\nDate de naissance (JJMMAAAA) : ");
    			scanf("%d",&nouv.dateN);
    			nouv.score=0;
    			fwrite(&nouv,sizeof(enrP),1,ptrFic);
    			printf("\nVoullez-vous ajouter un joueur ? (oui/non) ");
    			vb;
    			gets(rep);
    		}
            FILE *ptrFic=fopen("FiScore.dat","r");
            fread(&nouv,sizeof(enrP),1,ptrFic);
            while(!feof(ptrFic))
            {
            printf("%s\n%d\n\n",nouv.pseudo,nouv.dateN);
            fread(&nouv,sizeof(enrP),1,ptrFic);
            }
    	}
    	fclose(ptrFic);
    	system("PAUSE");
    }

  9. #8
    invite4492c379

    Re : [Aide]Langage C - Lecture dans un fichier

    Alors passer en mode debug peut-être intéressant (et indispensable à connaître quand tu programmes ...) ... surveille particulièrement la partie :

    Code:
      while (!feof(ptrFic)) {
          printf("%s\n%d\n\n", nouv.pseudo, nouv.dateN);
          fread(&nouv, sizeof(enrP), 1, ptrFic);
      }
    Pour info, j'utilise gcc également (sous linux). En mode développement ajoute toujours les options -Wall (tous les messages d'avertissements seront émis) -Wextra (même ceux qui d'habitude ne sont que des avertissements très secondaires), tu verras ces messages :

    Code:
    rouch.c: In function ‘main’:
    rouch.c:48:1: warning: control reaches end of non-void function
    /tmp/cclKtGlI.o: In function `main':
    rouch.c:(.text+0x81): warning: the `gets' function is dangerous and should not be used.

    Le premier te dit simplement que tu as déclaré main comme une fonction renovyant un int mais tu ne renvoies jamais de valeur (ici ce n'est pas particulièrement grave). Le second est intéressant, si tu consultes la manpage de gets tu verras :

    Code:
    BUGS
           Never use gets().  Because it is impossible to tell without know‐
           ing the data in advance how many characters gets() will read, and
           because gets() will continue to store characters past the end  of
           the  buffer,  it is extremely dangerous to use.  It has been used
           to break computer security.  Use fgets() instead.
    Une petite remarque ... c'est pas un bon plan de mettre un ; à la fin de la définition d'une macro.

  10. #9
    invite4f00587c

    Post Re : [Aide]Langage C - Lecture dans un fichier

    Mode debug ? Dans les options ils est grisé (F8) ... je ne connait pas ce mode.

    Comment ajouter des options au compilateur pour les résultats d'erreurs ? (-wall, -wextra)

    Si je mets "void main(void)" il me renvoie...

    Compiling: E:\IESN\Langage C\Labo\Série 6 - Fichiers\S6_Ex2\main.cpp
    E:\IESN\Langage C\Labo\Série 6 - Fichiers\S6_Ex2\main.cpp:14: error: '::main' must return 'int'
    Process terminated with status 1 (0 minutes, 0 seconds)
    1 errors, 0 warnings

    Dans cette partie je ne vois pas du tout où j'ai pu faire une erreur... un indice ?
    Code:
      while (!feof(ptrFic)) {
          printf("%s\n%d\n\n", nouv.pseudo, nouv.dateN);
          fread(&nouv, sizeof(enrP), 1, ptrFic);
      }
    Pour la macro et le gets c'est comme cela que l'on nous demande de procéder en cours :-/

    Merci de ton aide.

  11. #10
    invite4492c379

    Re : [Aide]Langage C - Lecture dans un fichier

    Citation Envoyé par Rouchesta Voir le message
    Mode debug ? Dans les options ils est grisé (F8) ... je ne connait pas ce mode.
    Je n'ai pas pour habitude d'utiliser code::blocks, néanmoins je me l'étais installé. J'ai créé un nouveau projet, copié ton code et j'ai un menu Debug dans lequel je trouve l'item start.
    As-tu créé un projet ?

    Citation Envoyé par Rouchesta Voir le message
    Comment ajouter des options au compilateur pour les résultats d'erreurs ? (-wall, -wextra)
    Apparemment via le menu Project/Build options ...
    tu peux cocher
    Enable all compiler warnings et Enable extra compiler warnings

    J'ai testé et ces warning sont émis même si les options ne sont pas cochées (mais c'est une bonne chose de les cocher ...)

    Citation Envoyé par Rouchesta Voir le message
    Si je mets "void main(void)" il me renvoie...

    Compiling: E:\IESN\Langage C\Labo\Série 6 - Fichiers\S6_Ex2\main.cpp
    E:\IESN\Langage C\Labo\Série 6 - Fichiers\S6_Ex2\main.cpp:14: error: '::main' must return 'int'
    Process terminated with status 1 (0 minutes, 0 seconds)
    1 errors, 0 warnings
    Bon, en C si tu déclares int main() il te suffiras de mettre un return 1; à la fin du code de main.

    Citation Envoyé par Rouchesta Voir le message
    Dans cette partie je ne vois pas du tout où j'ai pu faire une erreur... un indice ?
    Code:
      while (!feof(ptrFic)) {
          printf("%s\n%d\n\n", nouv.pseudo, nouv.dateN);
          fread(&nouv, sizeof(enrP), 1, ptrFic);
      }
    Désolé, je n'avais pas remarqué que tu faisais précéder ce code par un fread ...
    Pour trouver l'erreur il faut :
    1. s'assurer que tu écris correctement dans le fichier
    2. que tu lis correctement

    En mode debug tu peux placer des points d'arrêts et consulter le valeur des variables ...

    Citation Envoyé par Rouchesta Voir le message
    Pour la macro et le gets c'est comme cela que l'on nous demande de procéder en cours :-/

    Merci de ton aide.
    Je ne dis pas que c'est faux, mais que cela peut être la source d'erreurs difficilement détectables. Tu es sûr et certains qu'on t'a demandé de faire
    #define vb fflush(stdin);

  12. #11
    invite4f00587c

    Re : [Aide]Langage C - Lecture dans un fichier

    En effet en créant un projet cela fonctionne mais je ne sais pas trop comment l'interpréter...
    Code:
    Building to ensure sources are up-to-date
    Build succeeded
    Selecting target: 
    Debug
    Adding source dir: E:\IESN\Langage C\Labo\Série 6 - Fichiers\S6_Ex2\S6_Ex2TEST\
    Adding source dir: E:\IESN\Langage C\Labo\Série 6 - Fichiers\S6_Ex2\S6_Ex2TEST\
    Adding file: bin\Debug\S6_Ex2TEST.exe
    Starting debugger: 
    done
    Registered new type: wxString
    Registered new type: STL String
    Registered new type: STL Vector
    Setting breakpoints
    Debugger name and version: GNU gdb 6.8
    Child process PID: 4180
    Program exited with code 01.
    Debugger finished with status 0
    Je ne vois pas le contenu des variables 0.o

    Dans mon fichier si je l'ouvre avec notepad++, j'ai tout d'abord le pseudo bien écrit suivit de signes étranges et illisibles pour la date de naissance et le score.

    Je crois que je vais en rester là pour aujourd'hui car la je sèche ^^

    Merci de ton aide.
    Bonne nuit,

  13. #12
    invite4492c379

    Re : [Aide]Langage C - Lecture dans un fichier

    Alors debuguer signifie que tu places des points d'arrêts dans ton programme. L'exécution s'arrêtera et tu pourras consulter la valeur des variables par exemple. Le plus simple est de consulter un tuto sur le mode debug dans code blocks comme par exemple :
    http://wiki.codeblocks.org/index.php?title=Debugging_with _Code::Blocks

    Mais une recherche google t'en donneras certainement plus.

  14. #13
    invite447c3273

    Re : [Aide]Langage C - Lecture dans un fichier

    Bonjour,

    En regardant rapidement ton code, l'on peut voir que tu ouvre deux fois le fichier "FiScore.dat". une fois en lecture seul puis en écriture seule. Je pense que cette double ouverture peut poser problème.

    1) Pour valider cette théorie met un test pour valider l'ouverture comme tu à fait pour le premier.
    Code:
    if(ptrFic==NULL)	//Toujours vérifier qu'il est différent de NULL
    {
    	puts("Erreur - Memoire manquante !");
    }
    2) Ouvre en lecture et en écriture
    Code:
    FILE *ptrFic=fopen("FiScore.dat","r+");
    3) si tu utilise une autre fonction de lecture pour verifier qu'il n'y a pas un ou des problème avec le fichier. regarde ici http://www.siteduzero.com/tutoriel-3...html#ss_part_2: . Il y a plusieurs exemples de lecture dans un fichier

    Bon courage

Discussions similaires

  1. Compter le nombre de fichier dans un dossier en langage c
    Par inviteac8a4e72 dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 20/09/2011, 18h35
  2. Matlab Lecture de n fichier .txt et ecriture dans un fichier .xls
    Par invite24513ab6 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 26/07/2010, 10h12
  3. [c++] lecture dans un fichier texte
    Par invite9b88e44f dans le forum Logiciel - Software - Open Source
    Réponses: 17
    Dernier message: 24/07/2007, 18h46
  4. Lecture dans un fichier texte en Langage C
    Par invitee5fedd72 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 16/04/2007, 12h04
  5. MATLAB: lecture de float dans un fichier RTF
    Par invitecd42c963 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 26/07/2004, 14h03