Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 1
Регистрация: 20.12.2016
Сообщений: 121
1

обработка ошибок

22.12.2016, 17:29. Показов 728. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть класс треугольника, нужно, чтобы при вводе в конструктор нулей или минусовых значений вместо сторон, выдавало ошибку,получается ахинея. Скажите как это сделать
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
#include <iostream> 
#include <conio.h> 
#include <math.h> 
using namespace std; 
class Triangle{ 
private:
int side1, side2, side3;
public:
double perimeter, p, square;
Triangle(int t_side1, int t_side2, int t_side3) 
{
    SetSides(t_side1, t_side2, t_side3);
}
void ValidSides(int t_side1, int t_side2, int t_side3)
{
  try
  {
    throw 0;
  }
  catch(int t_side1)
  {
    cout << "Caught exception number:  " << t_side1 << endl;
    return;
  }
  cout << "No exception detected!" << endl;
  return;
}
void SetSides(int t_side1, int t_side2, int t_side3)
{
    side1 = t_side1;
    side2 = t_side2;
    side3 = t_side3;
}
double GetPerimeter(int t_side1, int t_side2, int t_side3)
{ 
perimeter = side1+side2+side3 ; 
p=perimeter/2;
return perimeter; 
} 
double GetArea(int t_side1, int t_side2, int t_side3) 
{ 
square = sqrt(p*(p-side1)*(p-side2)*(p-side3));
return square; 
} 
};
int main() 
{ 
setlocale(0,"");
Triangle t(3,4,5); 
t.ValidSides(3,4,5);
cout << "Периметр треугольника равен: " << t.GetPerimeter(3,4,5); 
cout << endl; 
cout << "Площадь треугольника равна: " << t.GetArea(3,4,5); 
cout << endl;
system("pause");
return 0; 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2016, 17:29
Ответы с готовыми решениями:

Обработка ошибок
Программа выводит информацию о дате рождения. Есть класс Date и унаследованный от него Birthday. ...

Обработка ошибок
Где почитать обработку ошибок при работе с текстовыми и бинарными файлами(считывание и запись),не в...

Обработка ошибок
while (1) { sh *newelem; newelem=new sh; cout&lt;&lt;&quot;Write number of the car&quot;&lt;&lt;&quot;\n&quot;;...

Обработка ошибок
void error(string s1, string s2) { throw runtime_error(s1 + s2); } int main() {...

7
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.12.2016, 17:57 2
C++
1
2
3
4
5
6
7
8
9
#include <stdexcept>
void SetSides(int t_side1, int t_side2, int t_side3)
{
    if (t_side1 <= 0 || t_side2 <= 0 || t_side3 <= 0)
        throw std::logic_error("Wrong value(s)");
    side1 = t_side1;
    side2 = t_side2;
    side3 = t_side3;
}
0
2 / 2 / 1
Регистрация: 20.12.2016
Сообщений: 121
22.12.2016, 18:05  [ТС] 3
если пытаюсь в конструктор передать 0 с мейна, то выводит всеравно и площадь, и периметр, но с ошибкой : Необработанное исключение в "0x768fb9bc" в "triangle.exe": Исключение Microsoft C++: std::logic_error по адресу 0x0047f750.. А как, при хотя бы одном невалидном значении, написать wrong и не выполнять функции взятия периметра и площади
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
23.12.2016, 04:28 4
Я бы сделал проверку валидности данных до передачи в конструктор.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
23.12.2016, 04:33 5
Цитата Сообщение от Витек1221 Посмотреть сообщение
Необработанное исключение в "0x768fb9bc" в "triangle.exe": Исключение Microsoft C++: std::logic_error по адресу 0x0047f750..
Ну так обработайте исключение.
C++
1
2
3
4
5
6
7
8
9
10
int main()
try
{
    bla-bla-bla
}
catch(const std::exception&error)
{
    std::cout<<error.what();
    return 0;
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
23.12.2016, 05:41 6
Цитата Сообщение от Renji Посмотреть сообщение
bla-bla-bla
Тут что должно быть? Создание объекта?
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
23.12.2016, 12:06 7
Цитата Сообщение от Витек1221 Посмотреть сообщение
Необработанное исключение
Так поймайте и обработайте его в блоке catch.

Но если не рассматривать обработку именно в конструкторе - я бы тоже сделал проверку с помощью обычных if в main.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
23.12.2016, 14:05 8
Цитата Сообщение от nd2 Посмотреть сообщение
Тут что должно быть?
То что у вас было в main.
1
23.12.2016, 14:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2016, 14:05
Помогаю со студенческими работами здесь

Обработка ошибок
Есть главный класс и несколько дочерних, входящих как в состав главного, так и друг в друга (не...

Обработка ошибок (исключений)
Всем привет. Делаю обработку исключений и не много не допонимаю как это работает. Во первых...

Обработка ошибок ввода
Доброго времени суток. Имеется код который я написал для обработки ошибок ввода: #include...

Обработка ошибок ввода
Как решить? Можете помочь 9 вариант Прочитайте правила: Правила форума Пункт 5.18: Запрещено...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru