Affichage d'un score en debut de partie
Mathrogue
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
VanDog Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
VanDog Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
Bonjour, j'ai créé un petit jeu où le but est de trouver un nombre mystère entre 1 et 100, le programme fonctionne, mais je souhaiterais afficher le score du joueur précédent en début de partie, sauf que là je bloque, je n'arrive pas à l'afficher.
Voici le code complet:
#include <iostream>
#include <fstream>
#include <time.h>
using namespace std;
int main()
{
int nombre, nombreSaisi; // la virgule evite de retaper la commande int
char nom[20]; // tableau de 20 caractères nommé nom
ofstream monFluxEcriture; //instanciation d'un flux en écriture
ifstream monFluxLecture; //instranciation d'un flux en lecture
clock_t temps, temps2; // instanciation de temps
float mScore, score, val;
srand(time(NULL)); // obtenir un nombre pseudo-aléatoire
nombre = rand() % 100 + 1; // affecte ce nombre aléatoire dans la variable nombre et le borde avec %100+1 entre 1 et 100
cout << nombre << endl; // affiche le nombre aléatoire
temps = clock();
cout << "Entrez votre nom " << endl;
cin >> nom;
do{
cout << "Saisissez un nombre" << endl;
cin >> nombreSaisi;
if (nombreSaisi > nombre) cout << "Trop grand ! "; // condition si (if)
if (nombreSaisi < nombre) cout << "Trop petit ! ";
} while (nombreSaisi != nombre); // != signifie équivalent
if (nombreSaisi == nombre) cout << "VOUS AVEZ GAGNE !! "; // J'atteste que nombreSaisi est équivalente à nombre
temps2 = (clock() - temps);
score = (float)temps2; // forcer le temps a devenir un décimal
score = score / 1000; // affiche le score que l'on divise puis que l'on affiche de nouveau
cout << "Votres temps est de " << score << endl;
monFluxEcriture.open ("C:/Users/Mathias/Documents/Visual Studio 2013/Projects/TpES3/Debug/score.txt",ios::app);
if (monFluxEcriture.is_open() == true)
{
monFluxEcriture << score << " " << nom << endl;
cout << "Fichier ouvert";
}
else cout << "Impossible d'ouvrir le fichier" << endl;
monFluxLecture.open("C:/Users/Mathias/Documents/Visual Studio 2013/Projects/TpES3/Debug/score.txt");
if (monFluxLecture.is_open())
{
monFluxLecture >> mScore;
}
do{
monFluxLecture >> val >> nom;
if (val < mScore) mScore = val;
}
while (monFluxLecture.eof() != true);
{
monFluxLecture >> score >> nom;
if (score < mScore)
{
mScore = score;
cout << "Meilleur score:" << mScore << endl;
}
}
return 0;
}
Et voici la partie qui est censé m'afficher le meilleur score:
monFluxLecture.open("C:/Users/Mathias/Documents/Visual Studio 2013/Projects/TpES3/Debug/score.txt");
if (monFluxLecture.is_open())
{
monFluxLecture >> mScore;
}
do{
monFluxLecture >> val >> nom;
if (val < mScore) mScore = val;
}
while (monFluxLecture.eof() != true);
{
monFluxLecture >> score >> nom;
if (score < mScore)
{
mScore = score;
cout << "Meilleur score:" << mScore << endl;
}
Avez vous une idée d'où peut provenir l'erreur ?
Merci d'avance
Voici le code complet:
#include <iostream>
#include <fstream>
#include <time.h>
using namespace std;
int main()
{
int nombre, nombreSaisi; // la virgule evite de retaper la commande int
char nom[20]; // tableau de 20 caractères nommé nom
ofstream monFluxEcriture; //instanciation d'un flux en écriture
ifstream monFluxLecture; //instranciation d'un flux en lecture
clock_t temps, temps2; // instanciation de temps
float mScore, score, val;
srand(time(NULL)); // obtenir un nombre pseudo-aléatoire
nombre = rand() % 100 + 1; // affecte ce nombre aléatoire dans la variable nombre et le borde avec %100+1 entre 1 et 100
cout << nombre << endl; // affiche le nombre aléatoire
temps = clock();
cout << "Entrez votre nom " << endl;
cin >> nom;
do{
cout << "Saisissez un nombre" << endl;
cin >> nombreSaisi;
if (nombreSaisi > nombre) cout << "Trop grand ! "; // condition si (if)
if (nombreSaisi < nombre) cout << "Trop petit ! ";
} while (nombreSaisi != nombre); // != signifie équivalent
if (nombreSaisi == nombre) cout << "VOUS AVEZ GAGNE !! "; // J'atteste que nombreSaisi est équivalente à nombre
temps2 = (clock() - temps);
score = (float)temps2; // forcer le temps a devenir un décimal
score = score / 1000; // affiche le score que l'on divise puis que l'on affiche de nouveau
cout << "Votres temps est de " << score << endl;
monFluxEcriture.open ("C:/Users/Mathias/Documents/Visual Studio 2013/Projects/TpES3/Debug/score.txt",ios::app);
if (monFluxEcriture.is_open() == true)
{
monFluxEcriture << score << " " << nom << endl;
cout << "Fichier ouvert";
}
else cout << "Impossible d'ouvrir le fichier" << endl;
monFluxLecture.open("C:/Users/Mathias/Documents/Visual Studio 2013/Projects/TpES3/Debug/score.txt");
if (monFluxLecture.is_open())
{
monFluxLecture >> mScore;
}
do{
monFluxLecture >> val >> nom;
if (val < mScore) mScore = val;
}
while (monFluxLecture.eof() != true);
{
monFluxLecture >> score >> nom;
if (score < mScore)
{
mScore = score;
cout << "Meilleur score:" << mScore << endl;
}
}
return 0;
}
Et voici la partie qui est censé m'afficher le meilleur score:
monFluxLecture.open("C:/Users/Mathias/Documents/Visual Studio 2013/Projects/TpES3/Debug/score.txt");
if (monFluxLecture.is_open())
{
monFluxLecture >> mScore;
}
do{
monFluxLecture >> val >> nom;
if (val < mScore) mScore = val;
}
while (monFluxLecture.eof() != true);
{
monFluxLecture >> score >> nom;
if (score < mScore)
{
mScore = score;
cout << "Meilleur score:" << mScore << endl;
}
Avez vous une idée d'où peut provenir l'erreur ?
Merci d'avance
A voir également:
- Affichage d'un score en debut de partie
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Son score snapchat ne bouge pas ✓ - Forum Snapchat
- Affichage double ecran - Guide
- Excel si cellule contient partie texte ✓ - Forum Excel
1 réponse
Holà !
Dans le cadre du forum C++, je vais t'apporter un regard plus C++ que C. Tu sembles avoir une approche plus C que je ne maitrise pas assez pour débugger ton code sensible, je vais donc te proposer une alternative, à défaut de mieux ^^
Mais avant, quelques remarques sur ton code C++ :
Les header de la lib standard C ont été repris avec un c, je t'invite à inclure :
Si tu sors de la boucle
Tu forces score à être un flottant mais tu lui fais subir une opération entière,
Tu devrais préférer un chemin relatif afin d'exporter facilement ton programme.
Voilà pour les remarques. Maintenant ton soucis, et bien tout est correct; ormis ce que je ne peux vérifier parce que je ne connais pas, à savoir les
Puisque je ne connais pas comment fonctionne ces chevrons, je vais te donner une méthode qui marche à chaque fois en C++ :)
Voilà, en espèrant t'avoir aidé ! N'hésite pas à redemander des explications ou à m'écrire par message privé ^^
Courage !
Dans le cadre du forum C++, je vais t'apporter un regard plus C++ que C. Tu sembles avoir une approche plus C que je ne maitrise pas assez pour débugger ton code sensible, je vais donc te proposer une alternative, à défaut de mieux ^^
Mais avant, quelques remarques sur ton code C++ :
#include <time.h>
Les header de la lib standard C ont été repris avec un c, je t'invite à inclure :
#include <ctime>
if (nombreSaisi == nombre) cout << "VOUS AVEZ GAGNE !! "; // J'atteste que nombreSaisi
Si tu sors de la boucle
while (nSaisi != n), c'est nécessairement que
nSaisin'est pas pas égale à
n, donc qu'il est égale :) Ainsi, ce IF là est en trop puisque tu passeras toujours au travers.
score = (float)temps2; // forcer le temps a devenir un décimal score = score / 1000;
Tu forces score à être un flottant mais tu lui fais subir une opération entière,
score / 1000transtypera le résultat en entier, puis stocker en flottant.
score / 1000. // ou (1000.f)conserve le caractère floattant :)
monFluxEcriture.open ("C:/Users/Mathias/Documents/Visual Studio 2013/Projects/TpES3/Debug/score.txt",ios::app);
Tu devrais préférer un chemin relatif afin d'exporter facilement ton programme.
flux.open(../dossierTonton/score.txt") // "../" réferre au dossier parent
Voilà pour les remarques. Maintenant ton soucis, et bien tout est correct; ormis ce que je ne peux vérifier parce que je ne connais pas, à savoir les
ifstream::[/download/telecharger-34082790-operator operator] >>()
Puisque je ne connais pas comment fonctionne ces chevrons, je vais te donner une méthode qui marche à chaque fois en C++ :)
std::string line; if ( std::ifstream reader(file.txt) ) { while ( getline(reader, line) ) { // utilisation de la ligne. } }
getlineprend en argument un
ifstreampour lire le flux, et un
std::stringoù il place ce qu'il récolte. Il récupère une ligne et c'est tout. Mais avec un
while,le
getlineva récupérer une ligne, renvoyer "true" pour " j'ai bien récupéré une ligne" ce qui relancera la boucle et le forcera à récuperer la ligne suivante... Donc le
whileva lire ligne à ligne le fichier. C'est là que tu peux stocker les
std::stringdans un
vector(par exemple) ou directement manipuler les valeurs récupérées.
Voilà, en espèrant t'avoir aidé ! N'hésite pas à redemander des explications ou à m'écrire par message privé ^^
Courage !