С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 0
Регистрация: 12.01.2014
Сообщений: 57

Исключительная ситуация

22.10.2014, 20:34. Показов 1442. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят вопрос касаемо кода:

Наберите текст программы приведенного примера обработки исключительных ситуаций и откомпилируйте его (рассмотрите 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<iostream.h>
#include<except.h>
#define MAXERR 10
class MaxErr{};
class Error{
public:
Error();
void Say();
private:
static int count;
};
void Run() throw(Error);
void trapper();
void zapper();
int Error::count;
void main()
{
 set_unexpected(trapper);
set_terminate(zapper);
for(;;)
{
try{Run();}
catch(Error e){e.Say();
}
}
void Run() throw(Error)
{
//throw Error();
throw “Невідомий тип об'єкта”;
}
void tzapper()
{
cout << “Обробник непередбачених ситуаций.  .”;
throw Error();
}
void zapper()
{
cout << “Обробник завершення функції”;
exit(-1);
}
Error::Error()
{
count++;
 if(count>MAXERR)
 throw MaxError();
}
void Error::Say()
{
cout << count << “\n”;
}
Рассмотреть то рассмотрю)Ну вот проблема в том, что Borland C++ не компилит, я прочел теорию и одно не понял этот код вообще должен запустится или же имелось ввиду ошибка должна быть в компиляторе и не выводить результат на екран?и соотвецтвенно используя другую функцию, должна быть иная ошибка?!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.10.2014, 20:34
Ответы с готовыми решениями:

Исключительная ситуация
это полностью рабочая прога списки студентов( добавление удаление вывод) как сделать чтобы когда я добавляю нового студента(когда пишу...

Исключительная ситуация (переполнение массива сверху)
Изучаем сейчас исключительные ситуации и нужно привести пример , т.е. вызвать исключительную ситуацию для переполнения массива сверху или...

Нужно что бы если в текстбокс не вводиться текст, то срабатывала исключительная ситуация, которая просила бы юзера заполнить его.
Нужно что бы если в текстбокс не вводиться текст, то срабатывала исключительная ситуация, которая просила бы юзера заполнить его. ...

9
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,202
22.10.2014, 20:52
Это уже у вас надо спрашивать, должно ли оно компилироваться или нет. С точки зрения языка С++ - не должно.

* В вашем коде в функции main нарушен баланс скобок {}

* В стандартной библиотеке языка С++ нет заголовочных файлов <iostream.h> и <except.h>. И если <iostream.h> можно распознать как доисторическую версию <iostream>, то что такое <except.h> - в упор не ясно. Доисторическая версия <exception>?

* Имена стандартных функций в библиотеке С++ заключены в namespace std

* Функция main в С++ обязана возвращать int, а не void.

* Динамические спецификации исключений, на которых существенно опирается ваш пример, в последнем стандарте языка С++ признаны "нежелательной" (deprecated) фичей. Если какой-то компилятор до сих пор их не поддерживает, то он никогда уже поддерживать их не будет.

А если это все написано для какого-то дремучего компилятора - то это совсем другая тема. Хотя я сомневаюсь, что даже дремучий компилятор проглотит код с нарушенным балансом {}

Добавлено через 7 минут
* Функция 'exit' объявлена в заголовочном файле <cstdlib> (<stdlib.h>), который в данном коде включить не догадались

Цитата Сообщение от MarkusR Посмотреть сообщение
рассмотрите 2 случая работы программы
Что такое "2 случая работы программы"? Где детальное объяснение, о каких "двух случаях" идет речь?
0
2 / 2 / 0
Регистрация: 12.01.2014
Сообщений: 57
22.10.2014, 20:52  [ТС]
Спасибо, но нам преподаватель об этом нечего не сказал, просто в лабораторных как пример дано и по нему разбирайся как хочешь!Я даже в онлайн компилятор бросаю, тоже самое, три версии с++ перепробовал и нечего в итоге.Нам даже не сказали какой компилятор использовать но скорее всего Borland C++, что делать с задачей не понятно!А на счет функции Void, она действительно пуста но используется для определения дальнейших значений set_unexpected
set_terminate
только зачем они нужны коль тоже пустые и нечего не возвращают?!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,202
22.10.2014, 20:57
* В программе нет класса 'MaxError', а есть лишь класс 'MaxErr'. Тем не менее предпоследняя функция делает 'throw MaxError()'.
* В качестве обработчика используется ранее объявленная функция 'trapper'. Тем не менее определения этой функции в программе нет. Есть 'tzapper'...

Короче, это не код. Это поток какого-то мутного сознания.

В мало-мальки причесанном виде (основанном на научном ванговании неоднозначных моментов), код будет выглядеть так

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
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
#define MAXERR 10
class MaxError {};
 
class Error{
public:
  Error();
  void Say();
private:
  static int count;
};
 
void Run() throw(Error);
void trapper();
void zapper();
 
int Error::count;
 
int main()
{
  set_unexpected(trapper);
  set_terminate(zapper);
  for(;;)
  {
    try{ Run(); }
    catch(Error e){ e.Say(); }
  }
}
 
void Run() throw(Error)
{
  //throw Error();
  throw "Невідомий тип об'єкта";
}
 
void trapper()
{
  cout << "Обробник непередбачених ситуаций." << endl;
  throw Error();
}
 
void zapper()
{
  cout << "Обробник завершення функції" << endl;
  exit(-1);
}
 
Error::Error()
{
  count++;
  if (count > MAXERR)
    throw MaxError();
}
 
void Error::Say()
{
  cout << count << endl;
}
Вот оно в работе
http://ideone.com/FmOdkG
0
2 / 2 / 0
Регистрация: 12.01.2014
Сообщений: 57
22.10.2014, 21:15  [ТС]
И да на счет:
<except.h> Как было написанно в теории. Для задания собственной функции-обработчика завершения программы следует использовать функцию set_terminate (), также объявленную в заголовочном файле EXCEPT.H

Добавлено через 2 минуты
и вот что мне еще понравилось) При запуске unexpected.cpp выведется 10 сообщений об ошибках перед завершением.
А как запустить?))Может класс дописать или что?Или я тугодум?)

Добавлено через 2 минуты
Хм ладно попробую так отправить отчет, если сгодится сделаю второе разъяснение, только перестрою эти функции.

Добавлено через 40 секунд
Действительно 10 ошибок))

Добавлено через 1 минуту
И да вопрос: какие компиляторы поддерживают язык
язык:
C++ 4.8.1?

Добавлено через 6 минут
Прошу прощения еще кто может ответить или вы TheCalligrapher, в Visual Studio 2013 такого рода кода будут приниматься?Или древние компиляторы нужны?)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,202
22.10.2014, 21:20
Я почистил ваш код (см. выше). Этот код будет приниматься компилятором GCC, в частности. (Например, на ideone.com)

В компиляторе MSVC++ этот код работать не будет (независимо от версии), потому что компилятор MSVC++ никогда не поддерживал динамические спецификации исключений. (Компилироваться будет, но в процессе выполнения не будет вести себя правильно.) И теперь уже ясно, что никогда не будет поддерживать по причинам, которые я упоминал выше.

Так что либо GCC, либо ищите что-то еще...
0
2 / 2 / 0
Регистрация: 12.01.2014
Сообщений: 57
22.10.2014, 21:23  [ТС]
TheCalligrapher, на сколько я знаю "GCC", ведь под линукс не так ли?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.10.2014, 21:36
Цитата Сообщение от MarkusR Посмотреть сообщение
"GCC", ведь под линукс не так ли?
В windows есть порт GCC - MinGW.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,202
22.10.2014, 21:36
Цитата Сообщение от MarkusR Посмотреть сообщение
TheCalligrapher, на сколько я знаю "GCC", ведь под линукс не так ли?
Нет. GCC есть под все. Скачиваете и ставите Cygwin и получаете GCC под Windows.
0
2 / 2 / 0
Регистрация: 12.01.2014
Сообщений: 57
22.10.2014, 21:44  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет. GCC есть под все. Скачиваете и ставите Cygwin и получаете GCC под Windows.
В линуксе он уже встроен?!Я просто так не смог пока разобраться, как там в командной строке сразу код писать, вернее можно создать текстовый документ с расширением .cpp!И компильнуть?!Линукс же сам написан на языке C++.

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
В windows есть порт GCC - MinGW.
Да помню читал об этом!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2014, 21:44
Помогаю со студенческими работами здесь

Ситуация не из приятных...
Итак, дело в том, что мне нужно чтобы Вы мне помогли заново все сделать(в Си не в C++!) ,т.к сам уже не успеваю из-за оплошности(то есть...

Массивы. Ситуация на рыбалке
Ребят.Добрый вечер постала задача ситуация на рыбалке.У нас есть рыбы которые имеют имя и массу.И у нас есть удилище.Мы должны создать...

Двусмысленная ситуация при наследовании
Вообщем хочу вызвать виртуальный метод через указать Класса Three ? выдает ошибку, но не пишет какую... Прошу помочь ...

Непонятная ситуация со счётчиком цикла
Есть задача: С использованием строкового массива и двумерного массива типа int в цикле запросить количество проданных книг по каждому...

Непонятная ситуация с добавлением элемента в вектор
Здравствуйте, У меня возникает, какая то непонятнейшая ситуация, когда я хочу добавить вектор в &quot;вектора вектора&quot;. Причем...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru