gilou Modérateur Modzilla | Bon, sinon, j'ai l'impression que tu vides pas cin de ce qui traine dedans après usage, et ça se manifeste en cas de réponse fausse (si on tape Titi au lieu de O ou N on boucle 4 fois sur le message d'erreur).
faire par exemple:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Sinon, il semble assez bien tourner ce programme, tant que les inputs sont justes.
Pour vérifier qu'on t'a bien donné une valeur numérique:
std::cin >> ajout1;
while(std::cin.fail())
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
std::cout << "Mauvaise saisie. Entrez un nombre. " << std::endl;
std::cin >> ajout1;
}
ici, ajout1 sera un nombre
et on doit encore nettoyer cin
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
La ligne 29
cout << "Vous avez selectionner " << nomjeu;
alors qu'on n'a pas encore saisi nomjeu, hem...
Pour le début de ton code, ça donnerait:
Code :
- #include <iostream>
- #include <string>
- using namespace std;
- int main()
- {
- /*0. Déclaration des variables*/
- string pseudo1;
- string pseudo2;
- string pseudo3;
- string nomjeu;
- double ajout1;
- double ajout2;
- double ajout3;
- char decision;
- int choix(0);
- char decision2;
- int affich;
- double score1;
- double score2;
- double score3;
- /*1. Demande des pseudos des differents joueurs + confirmation de l'utilisateur pour ceux-ci*/
- do{
- cout << "Entrer un pseudo pour le joueur 1" << endl;
- cin >> pseudo1;
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- cout << "Entrer un pseudo pour le joueur 2" << endl;
- cin >> pseudo2;
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- cout << "Entrer un pseudo pour le joueur 3" << endl;
- cin >> pseudo3;
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- // cout << "Vous avez selectionner " << nomjeu;
- cout << "Les infos sont : " << endl;
- cout << "Joueur 1 :" << pseudo1 << endl;
- cout << "Joueur 2 :" << pseudo2 << endl;
- cout << "Joueur 3 :" << pseudo3 << endl;
- cout << "Est ce correct ?[O]ui ou [N]on" << endl;
- cin >> decision;
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- while ((decision != 'O' && decision != 'o') && (decision != 'N' && decision != 'n'))
- {
- cout << "Veuillez mettre O ou o ou N ou n" << endl;
- cin >> decision;
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- }
- system("cls" );
- } while (decision == 'n' || decision == 'N');
- /*1.1 Demande du jeu + confirmation par l'utilisateur de celui-ci + remise des scores un 0 si décision de recommencer le programme*/
- do{
- do{
- cout << "Entrer le nom du jeu" << endl;
- cin >> nomjeu;
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- cout << "Nom du jeu :" << nomjeu << endl;
- cout << "Est ce correct ?[O]ui ou [N]on" << endl;
- cin >> decision;
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- while ((decision != 'O' && decision != 'o') && (decision != 'N' && decision != 'n'))
- {
- cout << "Veuillez mettre O ou o ou N ou n" << endl;
- cin >> decision;
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- }
- } while (decision == 'N' || decision == 'n');
- system("cls" );
- score1 = 0;
- score2 = 0;
- score3 = 0;
- /*2. Menu du programme*/
- do{
- cout << "Voulez-vous?" << endl;
- cout << "1. Ajouter un nouveau score au joueur 1" << endl;
- cout << "2. Ajouter un nouveau score au joueur 2" << endl;
- cout << "3. Ajouter un nouveau score au joueur 3" << endl;
- cout << "4. Afficher les scores d'un joueur" << endl;
- cout << "5. Afficher le podium" << endl;
- cout << "6. Quitter l'encodage des scores du jeu " << nomjeu << endl;
- cout << "Votre choix" << endl;
- cin >> choix;
- while(cin.fail()) {
- cin.clear();
- cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
- cout << "Mauvaise saisie. Entrez un nombre. " << std::endl;
- std::cin >> choix;
- }
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- /*2.1 Tant que choix est en dessous de 1 (choix du menu) au dessus de 6 ( choix du menu) => erreur + encodage du nouveau nombre*/
- while (choix <1 || choix > 6)
- {
- cout << "Erreur, veuillez rentrer un de ces nombres (1,2,3,4,5,6)" << endl;
- cin >> choix;
- while(cin.fail()) {
- cin.clear();
- cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
- cout << "Mauvaise saisie. Entrez un nombre. " << std::endl;
- std::cin >> choix;
- }
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- system("cls" );
- }
|
Enfin une remarque plus générale:
cout << "Entrer un pseudo pour le joueur 1" << endl;
cin >> pseudo1;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Pourquoi limiter pseudo 1, 2 ou 3 ou le nom du jeu à un mot sans blancs?
cout << "Entrer un pseudo pour le joueur 1" << endl;
getline(cin, pseudo1);
Me semble bien plus souple. Et comme on lit toute la ligne, inutile de faire de cleanup.
A+, Message édité par gilou le 30-06-2015 à 23:34:45 ---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --
|