Bonjour, je vous montre mon programme de test et je vous explique ensuite:
Alors déjà je ne sais pas si les exceptions sont légitimement appliquées ici, mais j'aimerais donc forcer l'utilisateur à entre un nombre en 1 et 3 (j'ai faire un for de 1 à 10 pour éviter une boucle infinie).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include <iostream> #include <limits> using namespace std; int main() { for(int i = 0; i < 10; i++) { try { int a; if(!(cin >> a)) throw(1); if(a < 1 || a > 3) throw(2); } catch(int const& e) { if(1 == e) { cout << "Prob de saisie" << endl; //cin.ignore(numeric_limits<int>::max(), '\n'); } if(2 == e) { cout << "Saisie pas dans le rang donnée" << endl; } } catch(...) { cout << "Exception on gérée" << endl; } } return 0; }
S'il rentre un entier autre que 1, 2 ou 3 tout se passe bien, le programme boucle et permet de redemander la saisie.
S'il rentre une chaîne de caractère ça part en sucette et ça m'affiche 10 fois problème de saisie. Je suppose donc que c'est lié à un problème de buffer mal vidé, j'aimerais donc savoir comment vider proprement l'entrée standard en c++ (la ligne commentée trouvée sur le net ne marche pas évidemment).
Et puis s'il rentre une flottant tient, il s'affiche également 10 fois problème de saisie, je suppose donc que l'entrée est castée en int au moment du stockage dans la variable, en revanche je me demande pourquoi on se retrouve avec ce problème de buffer (ou alors je fais fausse piste mais je pense pas).
Merci de votre aide!
Partager