146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782

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

11.02.2009, 01:33. Показов 2948. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сделать обработку исключения так, чтобы, если, например, вводим количество координат больше, чем можно, программа предлагала, или выйти, или попробовать ввести ещё раз.
Я пробовал с помощью switch, но там если ввести первый раз неправильно, то он запускается, если ещё раз неправильно, то уже обработка исключения не идёт, то есть, нужно под каждый неправильный ввод писать новый ввод объекта и обработку для него try { cin >> … } catch () {..}
Можно ли как-нибудь по-другому, не используя при этом, оператор goto?

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <iostream>
using namespace std;
int const nmax = 100;
class Vector
{
public:
    Vector ();              
    Vector (int, int);
    ~Vector ();
    void SetItsAmount (int);
    void SetItsCoordinates (int , int); 
    int GetItsAmount () const;
    int GetItsCoordinates (int) const;
    
    class xTooBig {};
    class xErrorInput {};
    class xZero {};
    
private:
    int itsAmount;          
    int itsCoordinates [nmax];          
      friend istream &operator>> (istream &, Vector &);     
    friend ostream &operator<< (ostream &, const Vector &); 
};
 
Vector::Vector ()
{
}
Vector::Vector (int value, int amount)
{
    int i;
    for (i = 0; i < nmax; i++)
        itsCoordinates [i] = value;
    itsAmount = amount;
}
Vector::~Vector ()
{
}
void Vector::SetItsAmount (int amount)
{
    itsAmount = amount;
}
void Vector::SetItsCoordinates (int value, int i)
{
    itsCoordinates [i] = value;
}
int Vector::GetItsAmount () const
{
    return itsAmount;
}
int Vector::GetItsCoordinates (int i) const
{
    return itsCoordinates [i];
}
istream &operator>> (istream & input, Vector & rhs)
{
    int value;
    cout << "Введите количество координат\n";
    input >> rhs.itsAmount;
    if (rhs.itsAmount > nmax)
        throw Vector::xTooBig ();
    if (rhs.itsAmount == 0)
        throw Vector::xZero ();
    for (int i = 0; i < rhs.GetItsAmount (); i++)
    {
        cout << "Координата " << i + 1 << " = ";
        if (!(input >> value))
            throw Vector::xErrorInput ();
        rhs.SetItsCoordinates (value, i);
    }
    return input;
}
ostream &operator<< (ostream & output, const Vector & rhs)
{
    int i;
    for (i = 0; i < rhs.GetItsAmount (); i++)
        output << "Координата " << i + 1 
        << " = " << rhs.GetItsCoordinates (i) << endl;
    return output;
}
void PrintAboutError ()
{
    cout << "Произошла ошибка\n";
    exit (1);
}
int main ()
{
    set_terminate (PrintAboutError);
    setlocale (LC_ALL,".1251");
    Vector Vector1 (0, 0), Vector2 (0,0), Vector3 (0, 0);
 
    try
    {
        cout << "Первый вектор:\n";
        cin >> Vector1;
        cout << endl;
 
        cout << "Второй вектор:\n";
        cin >> Vector2;
        cout << endl;
    }
    catch (Vector::xTooBig)
    {
        cout << "Введено слишком большое количество координат\n";
        return 0;
    
    }
    catch (Vector::xErrorInput)
    {
        cout << "Ошибка ввода значения координаты\n";
        return 0;
    }
    catch (Vector::xZero)
    {
        cout << "Нет смысла работать с вектором без координат\n";
        return 0;
    }
    catch (...)
    {
        cout << "Произошла ошибка\n";
        return 0;
    }
 
    cout << Vector1 << endl << Vector2 << endl;
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2009, 01:33
Ответы с готовыми решениями:

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

Обработка исключений
В задании функции должны генерировать подходящие исключения. Обработку исключений нужно выполнять главной функцией, которая должна...

Обработка исключений
Добрый день! Столкнулся с такой проблемой. У меня есть класс class MyClass { public: MyClass(/* какие то параметры*/); ...

3
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
11.02.2009, 08:03
Цитата Сообщение от qwert Посмотреть сообщение
Можно ли как-нибудь по-другому, не используя при этом, оператор goto?
Конечно! while
0
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
11.02.2009, 13:10
Проверяй в цикле, если правильно - то выходи, иначе проси еще раз ввести...
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
12.02.2009, 00:42  [ТС]
Спасибо. Сейчас приходится кардинально менять реализацию задачи. Когда переделаю попробую сделать с while.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2009, 00:42
Помогаю со студенческими работами здесь

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

Обработка исключений
Добрый день, столкнулась с такой проблемой. Использую конструктор для создания string библиотечного и передаю в качестве 2ого параметра...

Обработка исключений
Все функции должны реализоваться в 4-х вариантах: без спецификации исключений; со спецификацией throw(); с конкретной спецификацией с...

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

Обработка исключений
Здравствуйте! Есть вот такое выражение: Подскажите пожалуйста, как правильно реализовать обработку исключений. И у меня не...


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

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

Новые блоги и статьи
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru