Problème lecture dans un fichier en C

Résolu/Fermé
.Raph - 24 janv. 2009 à 10:45
 .Raph - 25 janv. 2009 à 12:32
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)
A voir également:

13 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2009 à 11:19
Salut,

au lieu de char nom1[] = "";
char nom1[50];
au lieu de
fscanf(fichier,"\n%s", &nom1)mets
fscanf(fichier,"%s", nom1)
0
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é)
0
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.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2009 à 19:40
Salut,

Je pense bien que l'erreur est due au "_" devant scores.
Il est où ce _ , puisque je ne le vois pas?
0

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.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2009 à 20:43
Re,

Essaie de mettre un autre nom pour ta fonction.
0
"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 ...
0
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 ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 janv. 2009 à 12:02
Salut,

Pour mieux comprendre colle tes fichiers ici ou mets les sur cjoint.com
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 janv. 2009 à 12:23
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
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 '*' token
et 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
0
Je dois tout ré-inclure dans chaque fichier C c'est ça ?
J'essaye alors.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 janv. 2009 à 12:31
Re,

Pas tout.

Juste #include <stdio.h>
0
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.
0