2012-06-13 2 views
0

Я хотел бы получить исключение, которое возникает, когда кто-то дает не значение числа в cin, поэтому программа будет читать следующее значение.Как поймать это исключение C++

#include <iostream> 

using namespace std; 

int main() 
{ 
    int x = 0; 
    while(true){ 
     cin >> x; 
     cout << "x = " << x << endl; 
    } 
    return 0; 
} 
+1

Там не исключение. –

ответ

4

Если вы действительно хотите использовать обработку исключений, вы могли бы сделать что-то вроде этого:

cin.exceptions(ios_base::failbit); // throw on rejected input 
try { 
// some code 
int choice; 
cin >> choice; 
// some more code 
} catch(const ios_base::failure& e) { 
    cout << "What was that?\n"; 
    break; 
} 

Ссылка: http://www.cplusplus.com/forum/beginner/71540/

4

Исключено исключение. Вместо этого cin устанавливает флаг «bad input». То, что вы хотите, это:

while ((std::cout << "Enter input: ") && !(std::cin >> x)) { 
    std::cin.clear(); //clear the flag 
    std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n'); //discard the bad input 
    std::cout << "Invalid input; please re-enter.\n"; 
} 

This series of questions объясняет это очень хорошо.

Ссылки:
clear()
ignore()

1
int main() 
{ 
    int x = 0; 
    cin.exceptions(ios::failbit); 
    while(true){ 
     try 
     { 
      cin>>x; 
     } 
     catch(ios_base::failure& e) 
     { 
      //.. 
     } 
     cout<<"x = "<<x<<endl; 
    } 
    return 0; 
} 

Это должно сработать.

2

Добавить что-то вроде:

if(cin.fail()) 
{ 
    cin.clear(); 
    cin.ignore(std::numeric_limits<std::streamsize>::max(),' '); 
    cout << "Please enter valid input"; 
} 
+0

Хмм, магические числа. –

+0

Для @KonradRudolph: замените 'cin.ignore (256, '');' с 'cin.ignore (std :: numeric_limits :: max(), '');' –

Смежные вопросы