Problème lecture dans un fichier en C
Résolu
.Raph
-
.Raph -
.Raph -
Bonjour,je code en ce moment un petit jeu tout bête de plus ou moins.
Je voudrais qu'on puisse gérer un affichage des scores.
Les scores seraient stockés dans un fichier score.sco
En fin de partie,le prog. lirait score.sco ,et vérifierait si un des scores actuel est inférieur (il faut trouver en le moins de coups possible) si c'est le cas,il serait remplacé.
Mais j'ai un petit problème pour lire dans le fichier :
Voila mon main.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "header.h"
void fonction (fichier);
int main()
{
srand(time(NULL));
FILE* fichier = NULL;
long choix = 0;
long score[3] = {0}; // Tableau des 3 meilleurs scores
char nom1[] = "";
printf(" =====Plus Ou Moins=====\n");
printf("\n\n\n\n");
printf("Menu:\n\n");
printf("1. Jouer Contre L'ordinateur\n");
printf("2. Jouer Contre un \"vrai\" Humain\n");
printf("3. Scores\n\n");
// Voila donc le menu,proposant une action a effectuer.
printf("\nJe veux executer l'action numero ");
scanf("%ld", &choix);
switch(choix)
{
case 1:
JcO();// Lancer la fonction JcO qui contient la partie joueur contre ordinateur
break;
case 2:
break;
case 3:
fichier = fopen ("score.sco","r");// J'ouvre score.sco qui contient: 124"RETOUR-A-LA-LIGNE"Raph
fscanf(fichier,"%ld", &score[0]);// Je scanne d'abord le score "ici 124"
fscanf(fichier,"\n%s", &nom1);// Ensuite le nom (Raph)
fclose(fichier);// Je ferme
printf("%ld , par %s ! \n", score[0], nom1);
// J'affiche le score,et le nom. Le nom marche,mais mon score est égal a 684451,soit pas ce que je lui ai demandé
break;
case 4:
break;
}
return 0;
}
void scores (fichier) // Vas savoir pourquoi je ne peux pas la mettre dans un fichier C,sinon,ça bugge.
{
// Pour l'instant,rien,mais elle gérera le fonction écrire le meilleur score.
}
Et,voila le contenu de score.sco:
124
Raph
Si quelqu'un pouvait me débloquer.
(Je pense pas que ce soit a cause du compilateur,mais j'utilise Code::Blocks)
Je voudrais qu'on puisse gérer un affichage des scores.
Les scores seraient stockés dans un fichier score.sco
En fin de partie,le prog. lirait score.sco ,et vérifierait si un des scores actuel est inférieur (il faut trouver en le moins de coups possible) si c'est le cas,il serait remplacé.
Mais j'ai un petit problème pour lire dans le fichier :
Voila mon main.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "header.h"
void fonction (fichier);
int main()
{
srand(time(NULL));
FILE* fichier = NULL;
long choix = 0;
long score[3] = {0}; // Tableau des 3 meilleurs scores
char nom1[] = "";
printf(" =====Plus Ou Moins=====\n");
printf("\n\n\n\n");
printf("Menu:\n\n");
printf("1. Jouer Contre L'ordinateur\n");
printf("2. Jouer Contre un \"vrai\" Humain\n");
printf("3. Scores\n\n");
// Voila donc le menu,proposant une action a effectuer.
printf("\nJe veux executer l'action numero ");
scanf("%ld", &choix);
switch(choix)
{
case 1:
JcO();// Lancer la fonction JcO qui contient la partie joueur contre ordinateur
break;
case 2:
break;
case 3:
fichier = fopen ("score.sco","r");// J'ouvre score.sco qui contient: 124"RETOUR-A-LA-LIGNE"Raph
fscanf(fichier,"%ld", &score[0]);// Je scanne d'abord le score "ici 124"
fscanf(fichier,"\n%s", &nom1);// Ensuite le nom (Raph)
fclose(fichier);// Je ferme
printf("%ld , par %s ! \n", score[0], nom1);
// J'affiche le score,et le nom. Le nom marche,mais mon score est égal a 684451,soit pas ce que je lui ai demandé
break;
case 4:
break;
}
return 0;
}
void scores (fichier) // Vas savoir pourquoi je ne peux pas la mettre dans un fichier C,sinon,ça bugge.
{
// Pour l'instant,rien,mais elle gérera le fonction écrire le meilleur score.
}
Et,voila le contenu de score.sco:
124
Raph
Si quelqu'un pouvait me débloquer.
(Je pense pas que ce soit a cause du compilateur,mais j'utilise Code::Blocks)
A voir également:
- Problème lecture dans un fichier en C
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
13 réponses
Salut,
au lieu de char nom1[] = "";
fscanf(fichier,"\n%s", &nom1)mets
au lieu de char nom1[] = "";
char nom1[50];au lieu de
fscanf(fichier,"\n%s", &nom1)mets
fscanf(fichier,"%s", nom1)
Merci beaucoup,ça fait des heures que j'étais bloqué sur ce code.
(Je débute)
C'est sympa d'avoir répondu aussi vite.(Ça a bien sur marché)
(Je débute)
C'est sympa d'avoir répondu aussi vite.(Ça a bien sur marché)
J'ai un autre problème.
Une fonction que j'appelle n'est pas reconnue.
Le message erreur est : " Undefined reference to "_scores"
(En français: Référence non définie vers _scores je crois)
Je pense bien que l'erreur est due au "_" devant scores.
Voila la source comprenant mes includes,mon header.h , la fonction scores , et l'appel de la fonction.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "header.h"
le header
void JcO ( );
void scores (FILE* fichier);
la fonction "scores"
void scores (FILE* fichier)
{
long score[3] = {0}; // Tableau des 3 meilleurs scores
char nom1[50];
fscanf(fichier,"%ld ", &score[0]);
fscanf(fichier,"%s",nom1);
printf("%ld points,par %s. \n", score[0], nom1);
}
l'appel de "scores"
fichier = fopen ("score.sco","r");
scores(fichier);
Encore une fois,si quelqu'un peut m'aider,je l'en remercie.
Une fonction que j'appelle n'est pas reconnue.
Le message erreur est : " Undefined reference to "_scores"
(En français: Référence non définie vers _scores je crois)
Je pense bien que l'erreur est due au "_" devant scores.
Voila la source comprenant mes includes,mon header.h , la fonction scores , et l'appel de la fonction.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "header.h"
le header
void JcO ( );
void scores (FILE* fichier);
la fonction "scores"
void scores (FILE* fichier)
{
long score[3] = {0}; // Tableau des 3 meilleurs scores
char nom1[50];
fscanf(fichier,"%ld ", &score[0]);
fscanf(fichier,"%s",nom1);
printf("%ld points,par %s. \n", score[0], nom1);
}
l'appel de "scores"
fichier = fopen ("score.sco","r");
scores(fichier);
Encore une fois,si quelqu'un peut m'aider,je l'en remercie.
Salut,
Je pense bien que l'erreur est due au "_" devant scores.
Il est où ce _ , puisque je ne le vois pas?
Je pense bien que l'erreur est due au "_" devant scores.
Il est où ce _ , puisque je ne le vois pas?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ben justement,le message d'erreur (" Undefined reference to "_scores" ) m'en indique un,alors qu'il n'y en a pas dans le code.
"Untilted reference to autre_nom."
Ça pourrait aussi être du aux #includes ,mais j'ai une autre fonction que marche dans le prog.
P-S: Si je me mets pas la fonction dans un autre fichier (ici scores.c) , que je la déclare et la laisse dans le main,le truc marche.
Ça pourrait donc être du au fichier,mais je vois pas pourquoi ...
Ça pourrait aussi être du aux #includes ,mais j'ai une autre fonction que marche dans le prog.
P-S: Si je me mets pas la fonction dans un autre fichier (ici scores.c) , que je la déclare et la laisse dans le main,le truc marche.
Ça pourrait donc être du au fichier,mais je vois pas pourquoi ...
J'ai quelque chose.
J'ai supprimé-recréé le fichier header,et scores (ils n'avaient pas l'air attachés au projet).
J'ai toujours un message d'erreur ... (plusieurs même)
La fonction scores:
void scores (FILE* fichier) // Erreur: syntax error before '*' token
long score[3] = {0}; // Tableau des 3 meilleurs scores
char nom1[50];
fscanf(fichier,"%ld ", &score[0]);
fscanf(fichier,"%s",nom1);
printf("%ld points,par %s. \n", score[0], nom1);
}
Les erreurs:
error: `fichier' undeclared (first use in this function) [Je l'ai pourtant déclaré ,c'est juste un type FILE ]
warning: implicit declaration of function `fscanf'[Je vois pas ce que ça peut vouloir dire]
error: (Each undeclared identifier is reported only once [Chaque indentifieur non déclaré est reporté seulement une fois ? ]
error: for each function it appears in.) [Erreur pour chaque fonction apparaissant ici ?]
warning: implicit declaration of function `printf' [Je vois toujours pas]
Programmer en C,c'est encore plus dur qu'IWBTG ...
C'est encore bien long avant de tout comprendre ?
J'ai supprimé-recréé le fichier header,et scores (ils n'avaient pas l'air attachés au projet).
J'ai toujours un message d'erreur ... (plusieurs même)
La fonction scores:
void scores (FILE* fichier) // Erreur: syntax error before '*' token
long score[3] = {0}; // Tableau des 3 meilleurs scores
char nom1[50];
fscanf(fichier,"%ld ", &score[0]);
fscanf(fichier,"%s",nom1);
printf("%ld points,par %s. \n", score[0], nom1);
}
Les erreurs:
error: `fichier' undeclared (first use in this function) [Je l'ai pourtant déclaré ,c'est juste un type FILE ]
warning: implicit declaration of function `fscanf'[Je vois pas ce que ça peut vouloir dire]
error: (Each undeclared identifier is reported only once [Chaque indentifieur non déclaré est reporté seulement une fois ? ]
error: for each function it appears in.) [Erreur pour chaque fonction apparaissant ici ?]
warning: implicit declaration of function `printf' [Je vois toujours pas]
Programmer en C,c'est encore plus dur qu'IWBTG ...
C'est encore bien long avant de tout comprendre ?
header.h
https://www.cjoint.com/?bBmhEdgco2
Joueur Contre Ordinateur
https://www.cjoint.com/?bBmiQgyHhJ
Main.c
https://www.cjoint.com/?bBmjwekQzo
Scores.c
https://www.cjoint.com/?bBmjYsaqkG
https://www.cjoint.com/?bBmhEdgco2
Joueur Contre Ordinateur
https://www.cjoint.com/?bBmiQgyHhJ
Main.c
https://www.cjoint.com/?bBmjwekQzo
Scores.c
https://www.cjoint.com/?bBmjYsaqkG
Salut,
Dans les fichiers JcO.c et scores.c tu utilises des fonctions (printf, scanf, fscanf) mais tu n'as pas utilisé la directive
#include<stdio.h>
Voici la compilation chez moi de tes fichiers
Dans les fichiers JcO.c et scores.c tu utilises des fonctions (printf, scanf, fscanf) mais tu n'as pas utilisé la directive
#include<stdio.h>
Voici la compilation chez moi de tes fichiers
lami20j@debian:~/trash/raph$ gcc -c JcO.c scores.c main.c JcO.c: In function 'JcO': JcO.c:15: warning: incompatible implicit declaration of built-in function 'printf' JcO.c:20: warning: incompatible implicit declaration of built-in function 'scanf' scores.c:3: error: expected ')' before '*' tokenet voici après l'ajout de #include<stdio.h>
lami20j@debian:~/trash/raph$ gcc -c JcO.c scores.c main.c
lami20j@debian:~/trash/raph$ gcc JcO.o scores.o main.o -o main
lami20j@debian:~/trash/raph$ ./main
=====Plus Ou Moins=====
Menu:
1. Jouer Contre L'ordinateur
2. Jouer Contre un "vrai" Humain
3. Scores
Je veux executer l'action numero
Effectivement,ça marche parfaitement.
Je n'aurais jamais deviné que je devais ré-inclure les fichiers.
Je me remets tout de suite au codage. (J'étais parti jouer tellement je suis impatient,je suis peut-être pas fait pour ça)
Donc,merci Lami20j , tu me sauves pas la vie,mais c'est tout comme.
// Je mets en résolu.
Je n'aurais jamais deviné que je devais ré-inclure les fichiers.
Je me remets tout de suite au codage. (J'étais parti jouer tellement je suis impatient,je suis peut-être pas fait pour ça)
Donc,merci Lami20j , tu me sauves pas la vie,mais c'est tout comme.
// Je mets en résolu.