Vérifier la saisie d'un utilisateur

Madaraa Messages postés 22 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 7 février 2013 - 12 sept. 2010 à 20:52
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 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";
    }        
    
}

2 réponses

cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
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....


louis
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
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
0
Rejoignez-nous