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

Обработка исключительной ситуации в блоке catch

28.11.2021, 12:47. Показов 696. Ответов 2
Метки #c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, необходимо осуществить генерацию исключительных ситуаций и их обработку. При возникновении исключения в блоке try, он "выбрасывает" это исключение, и дальнейшие строчки в этом блоке не выполняются, а выполняется блок catch, в котором, например, можно осуществить вывод информации об ошибке. Но можно ли осуществить работу так, чтобы в блоке catch пользователю предлагалось исправить ошибку (исправить неверный предыдущий ввод, выбрать какое-то действие и т.п.), чтобы программа сразу после этого вышла из catch и вернулась на то место в try, на котором закончила, и продолжила работу уже с корректными данными? Имею представление только о том, что можно всё это осуществить в цикле while, но можно ли без него?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2021, 12:47
Ответы с готовыми решениями:

Обработка исключительной ситуации с файлом
нужно сделать обработку исключительной ситуации- невозможность открыть файл. здесь на try выплывает необработанное исключение. fstream...

Обработка исключительной ситуации переполнения вещественного числа
Помогите написать программу, которая выполняет обработку исключительной ситуации переполнения вещественного числа, я в целов поняла, что...

Обработка исключительной ситуации для пробела в названии файла
int main() { ifstream ifs1, ifs2; ofstream ofs3; ofs3.exceptions(ofstream::badbit | ofstream::failbit ); try ...

2
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.11.2021, 15:38
Лучший ответ Сообщение было отмечено lev4e как решение

Решение

Цитата Сообщение от lev4e Посмотреть сообщение
можно ли осуществить работу так, чтобы в блоке catch пользователю предлагалось исправить ошибку (исправить неверный предыдущий ввод, выбрать какое-то действие и т.п.), чтобы программа сразу после этого вышла из catch и вернулась на то место в try, на котором закончила, и продолжила работу уже с корректными данными?
так что бы выполнение возобновилось сразу после throw, сделать не получится.
но можно вернуться на точку перед throw:

https://rextester.com/YBHG65945

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <csetjmp>
 
std::jmp_buf jump_buffer;
 
int main()
{
    try
    {
        if (setjmp(jump_buffer) != 1)
            throw std::exception();
        std::cout << "work continued\n";
    }
    catch(const std::exception& e)
    {
        std::cerr << "exception: " << e.what() << std::endl;
        std::longjmp(jump_buffer, 1);
    }
}
output:
Code
1
2
exception: std::exception
work continued
Добавлено через 6 минут
Цитата Сообщение от lev4e Посмотреть сообщение
Имею представление только о том, что можно всё это осуществить в цикле while
по ряду причин, полагаю, это единственный адекватный способ.

другие способы приводят к различным негативным последствиям.
например, способ с джампом использует глобальную переменную:
Цитата Сообщение от hoggy Посмотреть сообщение
std::jmp_buf jump_buffer;
и если попытаешься использовать его в многопоточном приложении,
то сразу столкнешься с проблемами синхронизации в разных потоках.

и вот нафига нужны все эти проблемы,
если можно написать простой для понимания код с циклом,
и не иметь подводных камней ?
1
28.11.2021, 15:58

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
и если попытаешься использовать его в многопоточном приложении,
то сразу столкнешься с проблемами синхронизации в разных потоках.
Там и потоки не нужны, чтобы отстрелить ноги. Достаточно добавить объектов с нетривиальными деструкторами:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <csetjmp>
 
std::jmp_buf jump_buffer;
 
template<int> struct S
{
    inline static int c = 0;
    S() { ++c; }
    ~S() { --c; }
};
 
int main()
{
    try
    {
        S<1> s1;
        if (setjmp(jump_buffer) != 1)
            throw std::exception();
        std::cout << "work continued\n";
    }
    catch(const std::exception& e)
    {
        S<2> s2;
        std::cerr << "exception: " << e.what() << std::endl;
        std::longjmp(jump_buffer, 1);
    }
    std::cout << S<1>::c << ' ' << S<2>::c;
}

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.11.2021, 15:58
Помогаю со студенческими работами здесь

Возбуждение исключительной ситуации
Помогите плз сгенерировать исключение. Требуется создать функцию, которая заполняет массив и возвращает true если это сделать удается,...

Обработчик исключительной ситуации
Задание: Определить обработчик исключительной ситуации, если количество созданных объектов класса А превышает заданное значение. Не знаю...

Изменение окна сообщения для исключительной ситуации
В программе есть контролируемая исключительная ситуация. Мне надо програмно изменить надпись вверху. Сейчас эта надпись берётся из...

Определить обработчик исключительной ситуации как реакции на самоприсвоение объектов одного класса
Класс B является производным от класса А. Определить обработчик исключительной ситуации как реакции на самоприсвоение объектов одного...

Определить обработчик исключительной ситуации, возникающей при попытке чтения элемента с пустой очереди
Помогите пожалуйста сделать это задание. Я не особо понял что тут нужно написать. Тема, которую мы проходим Исключительные ситуации. ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru