[Debutant] Try-Catch général
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:
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:
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 8O).
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:
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:
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 :)