Madaraa
Messages postés22Date d'inscriptionmardi 11 août 2009StatutMembreDernière intervention 7 février 2013
-
12 sept. 2010 à 20:52
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
13 sept. 2010 à 12:27
Bonsoir,
j'ai un exercice ou je dois tester la saisie de l'utilisateur, si c'est un chiffre entre 1 et 100 j'affiche le chiffre en question, mais il faut aussi que je gère les erreurs, si l'utilisateur affiche un chiffre a virgule je dois mettre un message d'erreur, il me manque simplement le test pour savoir si c'est un double mais je ne sais pas comment faire voici mon code:
#include
using namespace std;
int main()
{
try
{
int nb1;
cout<<"Entrez un chiffre entre 1 et 100 svp : ";
cin>>nb1;
if(nb1>=0 && nb1<=100)
{
cout<<nb1;
}
else
{
cout<<"Veuillez entrez un chiffre entre 1 et 100 svp";
}
}
catch(int)
{
cout<<"Veuillez entrez un chiffre entre 1 et 100 svp";
}
}
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 13 sept. 2010 à 10:27
Bonjour,
je pense qu'il faut que tu déclares une variable intermédiaire de type string et que tu testes cette string.
Quese passe-t-il si ton utilisateur rentre une lettre à la place d'un chiffre....
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 13 sept. 2010 à 12:27
Plusieurs soucis avec ton code:
- Èvite les using namespace, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace - Try.. catch ne sert pas à attraper ce genre d'erreur. Il n'attrape que ce qui est lancé par un throw.
- Un nombre à virgule entre dans un nombre entier. Tout ce qu'il y a après la virgule sera perdu, mais ça ne provoque pas d'erreur. Si un utilisateur entre 45.6, on lui affichera 45.
- Si un utilisateur entre "abcd", alors ton programme va déconner parce que ça n'entre pas dans un int.
Pour gérer toutes ces erreurs, tu peux faire comme ceci:
#include
#include <limits>
int main()
{
int nb1 = 0;
while (nb1 == 0)
{
std::cout << "Entrez un chiffre entre 1 et 100 svp : ";
std::cin >> nb1;
if (std::cin.fail() || nb1 < 0 || nb1 > 100)
{
nb1 = 0;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
std::cout << nb1 << std::endl;
return 0;
}
A noter que si tu veux vraiment dire à l'utilisateur "Pas de nombre à virgule svp", tu sera obligé d'utiliser la technique proposée par louis14, et utilise un std::string.
________________________________________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question