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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vevern
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 20
#1

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

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

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

Обработка исключений - C++
Необходимо создать три массива a, b и с размерами соответственно n1, n2 и n3 (n1=!n2=!n3). В массив а занести значения функции...

Обработка исключений - C++
Добрый вечер. Нужно обработать 5 исключений, я 3 обработал(и то мб неверно), а другие не могу придумать пока. Вот код: #include...

Обработка исключений - C++
Проблема. В main создаю объект класса MAS int или string. Нужно, что бы когда int - то заполнялся массив нулями, а когда string -...

Обработка исключений - C++
Почему не перехватывает ошибку и не выводит Error? а прога сама прекращает работу. #include &lt;iostream&gt; using namespace std; ...

обработка исключений - C++
Здравствуйте. В следующем коде, при запуске throw выдает ошибку &quot;Exception object adress&quot;. Не понимаю почему. Подскажите пожалуйста. ...

Обработка исключений - C++
Подскажите пожалуйста как продолжить выполнение программы после срабатывания оператора catch. catch завершает программу, но ее нужно...

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

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

Обработка исключений в векторах - C++
Здравствуйте, написал маленькую прогу по векторам (все работает) Список чем вы можете помочь: 1. Оценить чистоту кода и предложить его...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
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     Обработка исключений
Ответ Создать тему
Опции темы

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