Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Vevern
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 20
#1

Обработка исключений

07.12.2012, 13:35. Просмотров 438. Ответов 3
Метки нет (Все метки)

Надо отловить ввод данных некорректного типа.
Объясните пожалуйста на конкретном примере, как это правильно сделать.

C++ (Qt)
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
void main ()
{
setlocale(LC_ALL, "Russian_Russia.1251");
int h;
cout<<"Введите количество пар в последовательности"<<endl;
cin>>h;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 13:35
Ответы с готовыми решениями:

Обработка исключений с пмощью структурированной обработки исключений
Есть функция, которая определенным образом работает с файлами,но при работе с файлами &quot;не...

Обработка исключений
что то я не пойму а что в плюсах нельзя разве сделать что то типа: try { ... } catch (int)...

Обработка исключений
Программа должна содержать блоки try, catch, точку throw. Задание: Ввод пользователем...

Обработка исключений
Есть вопрос по заданию. С клавиатуры вводится номер ошибочной ситуации. В зависимости от того,...

Обработка исключений
Почему не перехватывает ошибку и не выводит Error? а прога сама прекращает работу. #include...

3
denys_l
52 / 52 / 10
Регистрация: 26.09.2011
Сообщений: 186
07.12.2012, 14:24 #2
C++
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
#include <iostream>
#include <windows.h>
using namespace std;
int main ()
{
SetConsoleOutputCP(1251);
int h;
cout<<"Введите количество пра в последовательности"<<endl;
try {
    cin >> h;
    if(cin.good() == 0) {
        throw "Неккорректный ввод!\n";
    }
    if(h < 0) {
        throw 1;
    }
 
}
catch(char *str) {
    cin.clear();
    cin.ignore(256,'\n');
    cout << str << endl;
    return 0;
}
catch(int) {
    cout << "Число пар не может быть меньше нуля\n";
    return 0;
}
 
cout << h << endl;
}
Т.е. исключительная ситуация в данном коде может возникнуть в следующих случаях:
1 Если введена строка
2 ну и пускай, если введено отрицательное число пар
Вот мы и помещаем наше
C++
1
cin >> h;
в блок try{}, где и будем генерировать исключение
Для каждого случая (catch(char *s){} и catch(int) {})генерируем уникальное исключение и передаем их на обработку блоку catch. Catch-ей как throw может быть несколько главное, чтобы первые отличались по принимаемым типам данных. А можно определить общий catch(...) {} и обрабатывать все исключения
0
Vevern
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 20
07.12.2012, 14:27  [ТС] #3
Спасибо большое.
0
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
07.12.2012, 18:44 #4
Vevern, что касается исключений, то делается это таким образом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// при возникновении ошибки генерировать исключениe
cin.exceptions(ios::failbit);
 
try
{        
    //...
    cin >> h;
}
 
catch(ios::failure&)
{
    // обработка ошибки...      
}
но в вашем случае скорее всего хватит и простой проверки состояния потока
C++
1
2
3
4
5
cin >> h;
if(!cin) 
{
    // обработка ошибки...
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2012, 18:44

Обработка исключений
Доброго времени суток. Использую RAD XE 4. Пытаюсь поймать исключения путем catch(Exeption...

Обработка исключений
Ребят, всем привет) помогите разобраться с вроде как простой задачкой, но весьма затруднительной...

Обработка исключений
Объясните мне толком для чего используются эти обработки исключений (Try, catch, throw). Сколько...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru