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

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

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

Студворк — интернет-сервис помощи студентам
Есть класс треугольника, нужно, чтобы при вводе в конструктор нулей или минусовых значений вместо сторон, выдавало ошибку,получается ахинея. Скажите как это сделать
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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2016, 17:29
Ответы с готовыми решениями:

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

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

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

7
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.12.2016, 17:57
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  [ТС]
если пытаюсь в конструктор передать 0 с мейна, то выводит всеравно и площадь, и периметр, но с ошибкой : Необработанное исключение в "0x768fb9bc" в "triangle.exe": Исключение Microsoft C++: std::logic_error по адресу 0x0047f750.. А как, при хотя бы одном невалидном значении, написать wrong и не выполнять функции взятия периметра и площади
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.12.2016, 04:28
Я бы сделал проверку валидности данных до передачи в конструктор.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
23.12.2016, 04:33
Цитата Сообщение от Витек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,427
23.12.2016, 05:41
Цитата Сообщение от Renji Посмотреть сообщение
bla-bla-bla
Тут что должно быть? Создание объекта?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
23.12.2016, 12:06
Цитата Сообщение от Витек1221 Посмотреть сообщение
Необработанное исключение
Так поймайте и обработайте его в блоке catch.

Но если не рассматривать обработку именно в конструкторе - я бы тоже сделал проверку с помощью обычных if в main.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
23.12.2016, 14:05
Цитата Сообщение от nd2 Посмотреть сообщение
Тут что должно быть?
То что у вас было в main.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.12.2016, 14:05
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru