2016-01-25 5 views
3

Я хочу получить int из строки, не используя тип int напрямую, чтобы получить преимущества от getline(), но каким-то образом я получаю сообщение об ошибке, если вход не является фактическим int ,ошибка при попытке получить int из строки

#include <iostream> 
#include <string> 

using namespace std; 

int main (int argc, char** argv) 
{ 
    string word = {0}; 

    cout << "Enter the number 5 : "; 

    getline(cin, word); 

    int i_word = stoi(word); 

    cout << "Your answer : " << i_word << endl; 

    return 0; 
} 

Когда пользовательский ввод 5 (или любой другой целое) выход:

Enter the number 5 : 5 
Your answer : 5 

Когда пользовательский ввод либо ENTER или любую другую букву, слово, и т.д ...:

Enter the number 5 : e 
terminate called after throwing an instance of 'std::invalid_argument' 
    what(): stoi 
Abandon (core dumped) 
+4

Re ad up при обработке исключений – RvdK

ответ

4

Это называется обработка исключений:

try 
{ 
    int i_word = stoi(word); 

    cout << "Your answer : " << i_word << endl; 
} 
catch (const std::invalid_argument& e) 
{ 
    cout << "Invalid answer : " << word << endl; 
} 
catch (const std::out_of_range& e) 
{ 
    cout << "Invalid answer : " << word << endl; 
} 
+0

Ухоженный, именно то, что мне нужно. Я не знал, что в C++ существует обработка обработки исключений, я пытаюсь учиться самостоятельно. Большое спасибо за ваш быстрый и понятный ответ. –

+0

@ Gradiuss Возможно, изучение из книги было бы лучшим вариантом. – user2079303

+0

Вот что я думал, но на данный момент я вроде как тестирую, что лучше всего подходит для C и C++, но я нахожу C++ удобным и легким в освоении. Но спасибо за совет @ user2079303 –

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