[C++]Interdiction de caractère

Interdiction de caractère [C++] - C++ - Programmation

Marsh Posté le 30-06-2015 à 15:34:14    

Bonjour a tous
 
Voici mon code :  

Code :
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. /*0. Déclaration des variables*/
  7. string pseudo1;
  8. string pseudo2;
  9. string pseudo3;
  10. string nomjeu;
  11. double ajout1;
  12. double ajout2;
  13. double ajout3;
  14. char decision;
  15. int choix(0);
  16. char decision2;
  17. int affich;
  18. double score1;
  19. double score2;
  20. double score3;
  21. /*1. Demande des pseudos des differents joueurs + confirmation de l'utilisateur pour ceux-ci*/
  22. do{
  23.  cout << "Entrer un pseudo pour le joueur 1" << endl;
  24.  cin >> pseudo1;
  25.  cout << "Entrer un pseudo pour le joueur 2" << endl;
  26.  cin >> pseudo2;
  27.  cout << "Entrer un pseudo pour le joueur 3" << endl;
  28.  cin >> pseudo3;
  29.  cout << "Vous avez selectionner " << nomjeu;
  30.   cout << "Les infos sont : " << endl;
  31.   cout << "Joueur 1 :" << pseudo1 << endl;
  32.   cout << "Joueur 2 :" << pseudo2 << endl;
  33.   cout << "Joueur 3 :" << pseudo3 << endl;
  34.   cout << "Est ce correct ?[O]ui ou [N]on" << endl;
  35.   cin >> decision;
  36.   while ((decision != 'O' && decision != 'o') && (decision != 'N' && decision != 'n'))
  37.   {
  38.    cout << "Veuillez mettre O ou o ou N ou n" << endl;
  39.    cin >> decision;
  40.   }
  41.   system("cls" );
  42. } while (decision == 'n' || decision == 'N');
  43. /*1.1 Demande du jeu + confirmation par l'utilisateur de celui-ci + remise des scores un 0 si décision de recommencer le programme*/
  44. do{
  45.  do{
  46.   cout << "Entrer le nom du jeu" << endl;
  47.   cin >> nomjeu;
  48.   cout << "Nom du jeu :" << nomjeu << endl;
  49.   cout << "Est ce correct ?[O]ui ou [N]on" << endl;
  50.   cin >> decision;
  51.   while ((decision != 'O' && decision != 'o') && (decision != 'N' && decision != 'n'))
  52.   {
  53.    cout << "Veuillez mettre O ou o ou N ou n" << endl;
  54.    cin >> decision;
  55.   }
  56.  } while (decision == 'N' || decision == 'n');
  57.  system("cls" );
  58.  score1 = 0;
  59.  score2 = 0;
  60.  score3 = 0;
  61.  /*2. Menu du programme*/
  62.  do{
  63.   cout << "Voulez-vous?" << endl;
  64.   cout << "1. Ajouter un nouveau score au joueur 1" << endl;
  65.   cout << "2. Ajouter un nouveau score au joueur 2" << endl;
  66.   cout << "3. Ajouter un nouveau score au joueur 3" << endl;
  67.   cout << "4. Afficher les scores d'un joueur" << endl;
  68.   cout << "5. Afficher le podium" << endl;
  69.   cout << "6. Quitter l'encodage des scores du jeu " << nomjeu << endl;
  70.   cout << "Votre choix" << endl;
  71.   cin >> choix;
  72.   /*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*/
  73.   while (choix <1 || choix > 6)
  74.   {
  75.    cout << "Erreur, veuillez rentrer un de ces nombres (1,2,3,4,5,6)" << endl;
  76.    cin >> choix;
  77.    system("cls" );
  78.   }
  79.   switch (choix)
  80.   {
  81.    /*2.2 Ajout du score du joueur1*/
  82.   case 1:
  83.    cout << "1. Ajouter un nouveau score au joueur 1" << endl;
  84.    cout << "Le score actuel du joueur 1 " << pseudo1 << " est de " << score1 << endl;
  85.    cout << "Veuillez encoder le score a ajouter" << endl;
  86.    cin >> ajout1; /* erreur 1 : dans le score si je met un caractère  
  87.          Objectif :  
  88.          Interdire tous les caractères et si entrée de caractère => afficher une erreur et demander a l'utilisateur a nouveau
  89.          la variable ajout1*/
  90.    score1 = score1 + ajout1;
  91.    cout << "Le nouveau score de " << pseudo1 << " est de " << score1 << endl;
  92.    system("pause" );
  93.    system("cls" );
  94.    break;
  95.    /*2.3 Ajout du score du joueur2*/
  96.   case 2:
  97.    cout << "2. Ajouter un nouveau score au joueur 2" << endl;
  98.    cout << "Le score actuel du joueur 2 " << pseudo2 << " est de " << score2 << endl;
  99.    cout << "Veuillez encoder le score a ajouter" << endl;
  100.    cin >> ajout2; /* erreur 1 : dans le score si je met un caractère  
  101.          Objectif :  
  102.          Interdire tous les caractères et si entrée de caractère => afficher une erreur et demander a l'utilisateur a nouveau
  103.          la variable ajout2*/
  104.    score2 = score2 + ajout2;
  105.    cout << "Le nouveau score de " << pseudo2 << " est de " << score2 << endl;
  106.    system("pause" );
  107.    system("cls" );
  108.    break;
  109.    /*2.4 Ajout du score du joueur3*/
  110.   case 3:
  111.    cout << "3. Ajouter un nouveau score au joueur 3" << endl;
  112.    cout << "Le score actuel du joueur 3 " << pseudo3 << " est de " << score3 << endl;
  113.    cout << "Veuillez encoder le score a ajouter" << endl;
  114.    cin >> ajout3; /* erreur 1 : dans le score si je met un caractère  
  115.          Objectif :  
  116.          Interdire tous les caractères et si entrée de caractère => afficher une erreur et demander a l'utilisateur a nouveau
  117.          la variable ajout3*/
  118.    score3 = score3 + ajout3;
  119.    cout << "Le nouveau score de " << pseudo3 << " est de " << score3 << endl;
  120.    system("pause" );
  121.    system("cls" );
  122.    break;
  123.    /*2.5 Affichage du score d'un joueur*/
  124.   case 4:
  125.    cout << "4. Afficher les scores d'un joueur" << endl;
  126.    cout << "Joueur 1 : " << pseudo1 << endl;
  127.    cout << "Joueur 2 : " << pseudo2 << endl;
  128.    cout << "Joueur 3 : " << pseudo3 << endl;
  129.    cout << "Selectionner le joueur(numero) auquel il faut afficher le score" << endl;
  130.    cin >> affich; /* erreur 2 : je rentre un caractere et le programme n'arrête pas de tourner : Objectif :  
  131.          Interdire tous les caractères et si entrée de caractère => afficher une erreur et demander a l'utilisateur a nouveau
  132.          la variable affich*/
  133.    while (affich <= 0 || affich > 3)
  134.    {
  135.     cout << "Erreur, veuillez selectionner 1,2 ou 3";
  136.     cin >> affich;
  137.    }
  138.    if (affich = 1)
  139.    {
  140.     cout << "Le score du joueur 1 est de " << score1 << endl;
  141.    }
  142.    else if (affich = 2)
  143.    {
  144.     cout << "Le score du joueur 2 est de " << score2 << endl;
  145.    }
  146.    else
  147.    {
  148.     cout << "Le score du joueur 3 est de " << score3 << endl;
  149.    }
  150.    system("pause" );
  151.    system("cls" );
  152.    break;
  153.    /*2.6 Affichage du podium ( les égalité ne sont pas pris en compte)*/
  154.   case 5:
  155.    if ((score1 <= score2) && (score2 <= score3))
  156.    {
  157.     cout << "1ere place : " << pseudo3 << " avec " << score3 << endl;
  158.     cout << "2eme place : " << pseudo2 << " avec " << score2 << endl;
  159.     cout << "3eme place : " << pseudo1 << " avec " << score1 << endl;
  160.    }
  161.    else if ((score1 <= score3) && (score3 <= score2))
  162.    {
  163.     cout << "1ere place : " << pseudo2 << " avec " << score2 << endl;
  164.     cout << "2eme place : " << pseudo3 << " avec " << score3 << endl;
  165.     cout << "3eme place : " << pseudo1 << " avec " << score1 << endl;
  166.    }
  167.    else if ((score2 <= score1) && (score1 <= score3))
  168.    {
  169.     cout << "1ere place : " << pseudo3 << " avec " << score3 << endl;
  170.     cout << "2eme place : " << pseudo1 << " avec " << score1 << endl;
  171.     cout << "3eme place : " << pseudo2 << " avec " << score2 << endl;
  172.    }
  173.    else if ((score2 <= score3) && (score3 <= score1))
  174.    {
  175.     cout << "1ere place : " << pseudo1 << " avec " << score1 << endl;
  176.     cout << "2eme place : " << pseudo3 << " avec " << score3 << endl;
  177.     cout << "3eme place : " << pseudo2 << " avec " << score2 << endl;
  178.    }
  179.    else if ((score3 <= score1) && (score1 <= score2))
  180.    {
  181.     cout << "1ere place : " << pseudo2 << " avec " << score2 << endl;
  182.     cout << "2eme place : " << pseudo1 << " avec " << score1 << endl;
  183.     cout << "3eme place : " << pseudo3 << " avec " << score3 << endl;
  184.    }
  185.    else if ((score3 <= score2) && (score2 <= score1))
  186.    {
  187.     cout << "1ere place : " << pseudo1 << " avec " << score1 << endl;
  188.     cout << "2eme place : " << pseudo2 << " avec " << score2 << endl;
  189.     cout << "3eme place : " << pseudo3 << " avec " << score3 << endl;
  190.    }
  191.    system("pause" );
  192.    break;
  193.    /*2.7 On quitte le programme avec décision de recommencer*/
  194.   case 6:
  195.    cout << "6. Quitter l'encodage des scores du jeu " << nomjeu << endl;
  196.    cout << "Voulez-vous recommencer le programme pour un autre jeu?" << endl;
  197.    cin >> decision2;
  198.    while ((decision2 != 'O' && decision2 != 'o') && (decision2 != 'N' && decision2 != 'n'))
  199.    {
  200.     cout << "Veuillez mettre O ou o ou N ou n" << endl;
  201.     cin >> decision2;
  202.    }
  203.    break;
  204.   }
  205.   system("cls" );
  206.   /*2.8 Si le choix n'est pas égale a 6 on ne quitte pas le programme*/
  207.  } while (choix != 6);
  208.  /*2.9 Si la decision de recommencer le programme est [O]ui alors on redemande a l'utilisateur un nom de jeu mais avec les mêmes pseudos*/
  209. }while (decision2 == 'O' || decision2 == 'o');
  210. cout << "Merci d'avoir utiliser le programme" << endl;
  211. return 0;
  212. }


 
Description :
 
Ce programme est destiné a gérer des scores pour n'importe quel jeu.
 
Mais comme vous le voyez dans le programme et dans mon code, les caractères pour moi sont un véritable problème car peut importe l'entrée du caractère je réussi a faire bugger mon programme ( nombre astronomique, programme qui tourne en boucle,...) .
Et le but pour moi est justement de vérifier ce que l'utilisateur a entré et si il y a un ou plusieurs caractères, afficher une erreur et lui redemander la variable pour qu'elle soit correct.
Je vous remercie d'avance de m'aider dans mon exploration du C++ ^^  
Et vous souhaite une bonne journée  
 
PS :  
-Si vous avez d'autres erreurs a me signaler , elles sont les bienvenues :) et je vous en remercie d'avance
-Je m'excuse également pour les divers fautes d'orthographe que j'ai pu commettre  
-On m'a déjà conseiller ce site là : http://cpp.developpez.com/faq/cpp/ [...] s-avec-cin
Mais il y a beaucoup de commande que je n'ai pas vu en cours et que je ne comprend pas via ce site :$
-Petite précision également mon programme ne doit contenir aucune fonction


Message édité par Axel98 le 30-06-2015 à 18:01:01
Reply

Marsh Posté le 30-06-2015 à 15:34:14   

Reply

Marsh Posté le 30-06-2015 à 18:49:28    

>Petite précision également mon programme ne doit contenir aucune fonction
 
Un prof qui demande ça en exercice ferait mieux d’arrêter d'enseigner la programmation.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-06-2015 à 20:02:25    

Gilou pour te répondre a ce moment là de l'année on avait pas encore vu les fonctions et le projet que je te présente aujourd'hui et aux autres utilisateur justement c'était avant ce fameux chapitre sur les fonctions

Reply

Marsh Posté le 30-06-2015 à 21:24:07    

Axel98 a écrit :

Gilou pour te répondre a ce moment là de l'année on avait pas encore vu les fonctions et le projet que je te présente aujourd'hui et aux autres utilisateur justement c'était avant ce fameux chapitre sur les fonctions


3 lectures et je ne comprends toujours pas ce que tu cherches à dire  :sweat:

Reply

Marsh Posté le 30-06-2015 à 21:50:30    

En gros notre professeur nous donne un certain nombre d'heure de cours ensuite par exemple après 10h il nous donne un projet a faire juste parès avoir fait ce projet on continue le cours :)
Et ce projet ne concernait pas les fonctions car on les as vu après le projet

Reply

Marsh Posté le 30-06-2015 à 22:48:34    

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 :
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. /*0. Déclaration des variables*/
  7. string pseudo1;
  8. string pseudo2;
  9. string pseudo3;
  10. string nomjeu;
  11. double ajout1;
  12. double ajout2;
  13. double ajout3;
  14. char decision;
  15. int choix(0);
  16. char decision2;
  17. int affich;
  18. double score1;
  19. double score2;
  20. double score3;
  21. /*1. Demande des pseudos des differents joueurs + confirmation de l'utilisateur pour ceux-ci*/
  22. do{
  23. cout << "Entrer un pseudo pour le joueur 1" << endl;
  24. cin >> pseudo1;
  25. cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  26. cout << "Entrer un pseudo pour le joueur 2" << endl;
  27. cin >> pseudo2;
  28. cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  29. cout << "Entrer un pseudo pour le joueur 3" << endl;
  30. cin >> pseudo3;
  31. cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  32. // cout << "Vous avez selectionner " << nomjeu;
  33.   cout << "Les infos sont : " << endl;
  34.   cout << "Joueur 1 :" << pseudo1 << endl;
  35.   cout << "Joueur 2 :" << pseudo2 << endl;
  36.   cout << "Joueur 3 :" << pseudo3 << endl;
  37.   cout << "Est ce correct ?[O]ui ou [N]on" << endl;
  38.   cin >> decision;
  39.   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  40.   while ((decision != 'O' && decision != 'o') && (decision != 'N' && decision != 'n'))
  41.   {
  42.    cout << "Veuillez mettre O ou o ou N ou n" << endl;
  43.    cin >> decision;
  44.    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  45.   }
  46.   system("cls" );
  47. } while (decision == 'n' || decision == 'N');
  48. /*1.1 Demande du jeu + confirmation par l'utilisateur de celui-ci + remise des scores un 0 si décision de recommencer le programme*/
  49. do{
  50. do{
  51.   cout << "Entrer le nom du jeu" << endl;
  52.   cin >> nomjeu;
  53.   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  54.   cout << "Nom du jeu :" << nomjeu << endl;
  55.   cout << "Est ce correct ?[O]ui ou [N]on" << endl;
  56.   cin >> decision;
  57.   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  58.   while ((decision != 'O' && decision != 'o') && (decision != 'N' && decision != 'n'))
  59.   {
  60.    cout << "Veuillez mettre O ou o ou N ou n" << endl;
  61.    cin >> decision;
  62.    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  63.   }
  64. } while (decision == 'N' || decision == 'n');
  65. system("cls" );
  66. score1 = 0;
  67. score2 = 0;
  68. score3 = 0;
  69. /*2. Menu du programme*/
  70. do{
  71.   cout << "Voulez-vous?" << endl;
  72.   cout << "1. Ajouter un nouveau score au joueur 1" << endl;
  73.   cout << "2. Ajouter un nouveau score au joueur 2" << endl;
  74.   cout << "3. Ajouter un nouveau score au joueur 3" << endl;
  75.   cout << "4. Afficher les scores d'un joueur" << endl;
  76.   cout << "5. Afficher le podium" << endl;
  77.   cout << "6. Quitter l'encodage des scores du jeu " << nomjeu << endl;
  78.   cout << "Votre choix" << endl;
  79.   cin >> choix; 
  80.   while(cin.fail()) {
  81.       cin.clear();
  82.       cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
  83.       cout << "Mauvaise saisie.  Entrez un nombre. " << std::endl;
  84.       std::cin >> choix;
  85.   }
  86.   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  87.   /*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*/
  88.   while (choix <1 || choix > 6)
  89.   {
  90.    cout << "Erreur, veuillez rentrer un de ces nombres (1,2,3,4,5,6)" << endl;
  91.    cin >> choix;
  92.    while(cin.fail()) {
  93.       cin.clear();
  94.       cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
  95.       cout << "Mauvaise saisie.  Entrez un nombre. " << std::endl;
  96.       std::cin >> choix;
  97.    }
  98.    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  99.    system("cls" );
  100.   }


 
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é!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed