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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Builder Подскажите рабочий пример по использованию TThread http://www.cyberforum.ru/cpp-beginners/thread22967.html
Если Вам не трудно, дайте ссылку или скиньте тут рабочий пример любого воздействия на форму из дочернего потока. На сколько понимаю используется класс TThread?
C++ надо программу, в которой задача состоит в том, чтобы найти точку на двумерной сетке Точка, безусловно, определяется координатами. Сетка должна иметь определенный размер, например, от 100 до 100 меш. Программа должна в начале своей деятельности выбирать точку на сетке(случайно), и задача пользователя будет,выбирать точку на сетке координат. В ответ, программа должна найти расстояние между точками и вывести на екран. Ето будет проиcходить до тех пор пока пользователь не угадает... http://www.cyberforum.ru/cpp-beginners/thread22964.html
C++ Сортировка массива структур
Имеется массив структур, который необходимо отсортировать по числовому ключу. Я написал код, но он не работает, поэтому просьба указать на ошибку. #include <stdio.h> #include <stdlib.h> int i; typedef struct {
C++ По матрице и заданному числу построить вектор
По матрице размерностью m*n и заданному числу построить вектор, элемент которого равен 1, если наибольший элемент соответствующей строки матрицы не меньше заданного числа, и 0 - в остальных случаях. Определить моду для элемента вектора. Считать m<=10, n<=20. Вот тут тоже спрашивали http://www.cyberforum.ru/cpp/thread18317.html , но так и не помогли)
C++ В квадратной матрице найти максимальный элемент для каждой строки http://www.cyberforum.ru/cpp-beginners/thread22888.html
4. В квадратной матрице с числом строк не более 15 найти максимальный элемент для каждой строки, подсчитать сумму найденных элементов и выбрать минимальный из них. Формат числа ±цц.
C++ Вычислить (1-sin0.1)+(1+sin0.2)+...+(1+sin1.0). //Вычислить (1-sin0.1)+(1+sin0.2)+...+(1+sin1.0). #include <iostream> #include <math.h> #include <conio.h> float a=0,n; //задание типов переменных int i; int main() { подробнее

Показать сообщение отдельно
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782

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

11.02.2009, 01:33. Просмотров 2367. Ответов 3
Метки (Все метки)

Как сделать обработку исключения так, чтобы, если, например, вводим количество координат больше, чем можно, программа предлагала, или выйти, или попробовать ввести ещё раз.
Я пробовал с помощью 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru