Как сделать исключение?
От: r1der Россия  
Дата: 17.08.09 16:26
Оценка:
Привет. Очередной у меня глупый вопрос возник.. допустим пользователь в инт переменную в помощью cin ввел букву.. программа завершится с ошибкой.. как перехватить исключение?
icq 314624
Re: Как сделать исключение?
От: _Ursus_  
Дата: 17.08.09 17:24
Оценка:
Здравствуйте, r1der, Вы писали:

R>Привет. Очередной у меня глупый вопрос возник.. допустим пользователь в инт переменную в помощью cin ввел букву.. программа завершится с ошибкой.. как перехватить исключение?


catch!
Re: Как отловить исключение?
От: alzt  
Дата: 17.08.09 18:05
Оценка:
Здравствуйте, r1der, Вы писали:

R>Привет. Очередной у меня глупый вопрос возник.. допустим пользователь в инт переменную в помощью cin ввел букву.. программа завершится с ошибкой.. как перехватить исключение?


Не сделать исключение, а отловить.
Сделать — это либо кинуть исключение, либо создать свой класс-исключение.

Пример обработки ошибок:
        int digit = -1;
    try
    {
        cout << "Please input a letter" << endl;

        cin >> digit;
        
        if(cin.fail())
            cout << "It wasn't a digit!" << endl;

        if(!cin)
            cout << "It wasn't a digit!" << endl;
    }
    catch(...)
    {
        cout << "unknown exception" << endl;
    }
Re: Как сделать исключение?
От: Micren  
Дата: 17.08.09 18:35
Оценка:
Здравствуйте, r1der, Вы писали:

R>Привет. Очередной у меня глупый вопрос возник.. допустим пользователь в инт переменную в помощью cin ввел букву.. программа завершится с ошибкой.. как перехватить исключение?


1. Программа ошибкой не завершится. Будет установлен флаг failbit потока, а переменная не будет модифицирована. Так по умолчанию. Проверить флаг можно методом fail().
    int num;
    cin>>num;
    if(cin.fail())
    {
        cout<<"Error"<<endl;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(),'\n');
    }


2. Для того, чтоб поток генерировал исключения необходимо установить флаги при которых будут эти исключения генерироваться.
    int num;
    cin.exceptions(ios::failbit);
    try
    {
        cin>>num;
    }
    catch(runtime_error& e)
    {
        cout<<e.what()<<endl;
    }
Re[2]: Как сделать исключение?
От: r1der Россия  
Дата: 17.08.09 19:06
Оценка:
Здравствуйте, Micren, Вы писали:

M>Здравствуйте, r1der, Вы писали:


R>>Привет. Очередной у меня глупый вопрос возник.. допустим пользователь в инт переменную в помощью cin ввел букву.. программа завершится с ошибкой.. как перехватить исключение?


M>1. Программа ошибкой не завершится. Будет установлен флаг failbit потока, а переменная не будет модифицирована. Так по умолчанию. Проверить флаг можно методом fail().

M>
M>    int num;
    cin>>>num;
M>    if(cin.fail())
M>    {
M>        cout<<"Error"<<endl;
M>        cin.clear();
M>        cin.ignore(numeric_limits<streamsize>::max(),'\n');
M>    }
M>


M>2. Для того, чтоб поток генерировал исключения необходимо установить флаги при которых будут эти исключения генерироваться.

M>
M>    int num;
M>    cin.exceptions(ios::failbit);
M>    try
M>    {
        cin>>>num;
M>    }
M>    catch(runtime_error& e)
M>    {
M>        cout<<e.what()<<endl;
M>    }
M>



а модно поподробнее про cin.exceptions(ios::failbit); и runtime_error& e .я знаю как раотаю исключения.. но мне непоятно.. почему исключение runtime_error&

и кстати что означает вот ээто? numeric_limits<streamsize>::max() где про это можно почитать?
icq 314624
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.