Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Vevern
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 20
07.12.2012, 13:35     Обработка исключений #1
Надо отловить ввод данных некорректного типа.
Объясните пожалуйста на конкретном примере, как это правильно сделать.

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 13:35     Обработка исключений
Посмотрите здесь:

C++ обработка исключений
C++ Обработка исключений
C++ Обработка исключений
Обработка исключений C++
Обработка исключений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denys_l
51 / 51 / 4
Регистрация: 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(...) {} и обрабатывать все исключения
Vevern
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 20
07.12.2012, 14:27  [ТС]     Обработка исключений #3
Спасибо большое.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
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) 
{
    // обработка ошибки...
}
Yandex
Объявления
07.12.2012, 18:44     Обработка исключений
Ответ Создать тему
Опции темы

Текущее время: 14:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru