valveur
Messages postés2Date d'inscriptiondimanche 28 mars 2010StatutMembreDernière intervention11 mai 2010
-
11 mai 2010 à 13:05
valveur
Messages postés2Date d'inscriptiondimanche 28 mars 2010StatutMembreDernière intervention11 mai 2010
-
11 mai 2010 à 15:41
Bonjour,
Voila mon simple programme, le problème est sur la saisie du choix:
Si je tape une lettre mon programme ne s'arrête pas.
Est ce que mon exception est mal placé?
int displayMenu()// fonction afichage menu avec retour du choix
{
int selection;
cout<<"[-------------------------Menu--------------------]"<<endl;
cout<<"1. Consultez vos rdv"<<endl;
cout<<"2. Inserez un rdv"<<endl;
cout<<"3. Supprimer un rdv"<<endl;
cout<<"4. Quitter"<<endl;
cout<<"Votre choix : "; cin >> selection;
return selection;
}
int main(){
//-------------------------------mon menu---------------------------------------------------------------
bool choix = false;
try{
while (!choix)
{
int selection = displayMenu();
switch(selection)
{
case 1: ;
break;
case 2: ;
break;
case 3: ;
break;
case 4: system("cls"); choix = true; cout<< "fin du programme" <<endl;
break;
default: throw
cout << "!!!!!! Veuillez faire un choix de 1 a 4 svp !!!!!!" << endl << endl;
}
}
}
catch(...){ cout<<"ERROR: fin du prog"<<endl; exit(0); }
system("pause");
return 0;
}
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 11 mai 2010 à 14:28
Attention "throw", qui veut dire "relancer la dernière exception catchée", n'est pas standard.
De plus, inclure <exception> n'est pas utile. Enfin, utiliser une exception juste pour ça, c'est un peu du gachis.
Autre remarque:
* Évite les "using namespace std", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace * Évite les "system" (sauf quand tu debug). Tu perds la portabilité de ton programme pour une fonctionnalité très discutable.
Pour faire propre (Gestion des caractères invalides + gestion du nombre de choix):
#include
#include <limits>
/*!
** Permet de gerer tout type de menu.
** Gere les entrees invalides, en forcant l'utilisateur
** a entree une donnee valide.
**
** @param message Le message a affiche
** @param nbChoice Le nombre de choix que le menu aura
**
** @return Le choix de l'utilisateur
*/
int getChoice(const std::string& message, int nbChoice)
{
int choix = 0;
while (choix < 1 || choix > nbChoice)
{
std::cout << message;
std::cin >> choix;
if (std::cin.fail())
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
return choix;
}
int main()
{
int choice = getChoice("1. Consultez vos rdv\n"
"2. Inserez un rdv\n"
"3. Supprimer un rd\n"
"4. Quitter\n", 4);
std::cout << "Votre choix: " << choice << std::endl;
return 0;
}
valveur
Messages postés2Date d'inscriptiondimanche 28 mars 2010StatutMembreDernière intervention11 mai 2010 11 mai 2010 à 15:41
Salut CptPingu,
Merci pour ton programme. C'est exactement ça.
Sinon je ne connaissais pas <limits>. Je vais aller de suite l'étudier de plus près.
Et pour using namespace std aussi. Ceci dit les profs nous ont appris comme ça ( par paresse je pense ).