Bien boujour à tous,

Je débute en C++, et j'aimerais faire un Try{} Catch(){}, mais je n'arrive pas à trouver d'informations concluantes sur mon problème...

Voici le principe de ce que je veux faire :

Une invite apparait sur un terminal. L'utilisateur répond à la question posée.

exemple:.

Dans mon code, et dans le cas où l'utilisateur rentre effectivement un nombre, je souhaite rentrer cette valeur dans une variable de type int.
J'ai pensé à celà:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
int ans;
...
std::cin >> ans;
.

Si jamais la réponse n'est PAS du bon type, je souhaite réafficher l'invite. Voici le code auquel j'ai pensé :

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
 
int ans;
bool pass=false;
 
while(!pass)
{
   try
   {
      std::cout << "INT";
      std::cin >> ans;
      pass=true;
 
   }
   catch(...)
   {
      pass=false;
   }
}
Malheureusement, ce code n'a pas l'air de lever d'exeptions, et on ne passe apparement pas par le block catch(...).

Je n'ai pas de "plantage" apparent, et j'obtiens des résultats très étranges dans le suite de l'execution (par exemple affichage de tous les "std::cout" suivant ).
Je ne comprend pas trop ce qui se passe, étant donné que mon programme cesse de s'exectuer normalement, mais sans lever d'exeption...


Voici le code exact de mon programme de test, ainsi que les résultats :

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
38
39
40
 
#include <iostream>
using namespace std;
 
int main(void)
{
   bool pass=false;
   int ans;
   string ans2;
   bool ans3;
   double ans4;
   char ans5[50];
 
   while(!pass)
   {
      try
      {
         cout << "INT";
         cin >> ans;
         pass=true;
         cout << "OK";
      }
      catch(...)
      {
         pass=false;
         cout << "ERREUR!!!";
      }
      cout << pass;
   }
   cout << "STRING";
   cin >> ans2;
   cout << "BOOL";
   cin >> ans3;
   cout << "DOUBLE";
   cin >> ans4;
   cout << "CHAR[]";
   cin >> ans5;
 
   return 0;
}
Résultats :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
name@machine:~$ ./Test
INT=m  //ma réponse (à un type attendu int): un caractère 'm'
1OKSTRING=BOOL=DOUBLE=CHAR[]=name@machine:~$
Quelqu'un a-t-il une idée de ce qui se passe ?

Merci d'avance