[C++] probleme dans la validation du choix d'un menu

probleme dans la validation du choix d'un menu [C++] - C++ - Programmation

Marsh Posté le 22-01-2004 à 23:06:47    

Bonjour,
 
Voila je debute en C++ (mais bon j'ai deja fait du C, du java et d'autre..) et j'ai un petit probleme sur la validation de la saisie d'un choix dans un menu.
 
voici le code
 

Code :
  1. void main()
  2. {
  3. const int nbItem=3;
  4. int choix;
  5. std::string *item = new std::string[nbItem];
  6. item[0] = "choix1";
  7. item[1] = "choix2";
  8. item[2] = "choix3";
  9. choix = menu(item, nbItem);
  10. std::cout<<choix;
  11. }
  12. int menu (std::string *item, int nbItem)
  13. {
  14. int i;
  15. int choix;
  16. choix = 0;  //initialisation pour entrer dans la boucle
  17. for (i=0; i<=nbItem-1; i++)
  18. {
  19.  std::cout<<i<<" - "<<item[i]<<std::endl;
  20. }
  21. // si une lettre probleme... voir pourquoi
  22. while ((choix <=0) || (choix>nbItem))
  23. {
  24.  std::cout<<"Saisiez votre choix entre 1 et "<<nbItem<<":"<<std::endl;
  25.  std::cin>>choix;
  26.  std::cin.clear(); //purge le buffer d'entrée
  27. }
  28. return (choix);
  29. }


 
Donc voila, si je saisie un int hors intervalle, pas de probleme je boucle comme il faut.
En revanche si je saisie un caractere, la c'est la catastrophe... En effet, je revient bien dans ma boucle et mon message d'invite de saisie s'affiche, mais ça ne me rend jamais la main et ça affiche le message en bouvle (infinie)...  
 
Si quelqu'un a deja eu le meme probleme et l'a resolu merci de me venir en aide.
 


---------------
Des images
Reply

Marsh Posté le 22-01-2004 à 23:06:47   

Reply

Marsh Posté le 22-01-2004 à 23:14:49    

As tu déjà manipulé la fonction scanf en C ? Si oui, le problème est exactement le même. Si non, repart voir tes cours de C :D En fait, si tu entres qq chose qui ne peut pas être parsé en int, ce caractère incorrect reste dans le tampon d'entrée malgré tout.
 
PS : tu utilises les std::string, c'est bien. Alors pourquoi tu utilises des std::string[] avec en plus le paramètre nbItem à te trimbaler ? Utilise les std::vector pour simplifier ton code.

Reply

Marsh Posté le 22-01-2004 à 23:22:52    

Kristoph a écrit :

As tu déjà manipulé la fonction scanf en C ? Si oui, le problème est exactement le même. Si non, repart voir tes cours de C :D En fait, si tu entres qq chose qui ne peut pas être parsé en int, ce caractère incorrect reste dans le tampon d'entrée malgré tout.


En effet avec scanf je voit le truc...
Mais la justement avec le srd::cin.clear() je pensais que ça vidait mon buffer d'entrée... et donc que ben le caractere ne devrait pas rester dans le tampon...
j'suis perdue...  
 
 

Citation :

PS : tu utilises les std::string, c'est bien. Alors pourquoi tu utilises des std::string[] avec en plus le paramètre nbItem à te trimbaler ? Utilise les std::vector pour simplifier ton code.


En effet j'ai pas penser au std::vector... je debute sorry :)


---------------
Des images
Reply

Sujets relatifs:

Leave a Replay

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