Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945

Возврат из блока catch

25.04.2019, 19:29. Показов 3604. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Можно ли вернуться в метод Main после отлова исключения (возврат из блока catch)? Если нет, тогда зачем вообще нужен try{} catch{} если программа на этом заканчивает работу? Хочется сделать, например, пользователь вводит букву вместо цифры, а ему сообщение об ошибке и возврат в точку ввода значения. Разъясните пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2019, 19:29
Ответы с готовыми решениями:

Объясните устройство блока try-catch
catch (FormatException ex) Ничего сложного в этом операторе не вижу, да вот только понять не могу, что за "ех" такое. Во всех...

JUnit тестирование блока catch
Как написать тесты к методу чтобы покрывались блоки catch () и остальные строки? 4.12 Картинки и любые другие файлы загружайте на...

Разбор блока catch (исключения)
Задание звучит так: Даны две функции: double hmean(double a, double b) throw(hmean_error) - нахождение среднего гармонического. ...

16
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.04.2019, 19:46
Лучший ответ Сообщение было отмечено Talamaur как решение

Решение

Цитата Сообщение от Talamaur Посмотреть сообщение
Можно ли вернуться в метод Main после отлова исключения (возврат из блока catch)?
Можно.

Цитата Сообщение от Talamaur Посмотреть сообщение
Хочется сделать, например, пользователь вводит букву вместо цифры, а ему сообщение об ошибке и возврат в точку ввода значения.
Тут можно и без исключений:
C#
1
2
3
4
5
6
7
static int ReadInt(string prompt, Predicate<int> condition = null)
{
   int result;
   do Console.Write(prompt);
   while (!int.TryParse(Console.ReadLine(), out result) || (condition != null && !condition(result)));
   return result;
}
Использование:
C#
1
int value = ReadInt("Введите число: ");
Или если надо дополнительное ограничение на значение:
C#
1
int value = ReadInt("Введите число от 0 до 10 включительно: ", x => x > 0 && x <= 10 );
0
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
25.04.2019, 19:52  [ТС]
kolorotur, А можно небольшой код чтоб чуть было понятней где какое блоки и что куда идет. И как Ваши методы будут реализованы там. Хочется увидеть этот выход из catch. Просто пока нет столько знаний что бы без кода абстрактно понять. Просто у меня программа заканчивает работу, а я хочу сделать чтобы выдало сообщение и вернулось в точку где был пойман эксепшн.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.04.2019, 19:55
Цитата Сообщение от Talamaur Посмотреть сообщение
Хочется увидеть этот выход из catch.
C#
1
2
3
4
5
6
7
8
9
10
11
static void Main()
{
   // Вернет либо число, либо null если произошла ошибка ввода
   int? value = ReadInt();
}
 
static int? ReadInt()
{
   try { return int.Parse(Console.ReadLine()); }
   catch (FormatException) { return null; }
}
1
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
25.04.2019, 20:02  [ТС]
До этого момента я думал что весь код в Main берется в блок try
А вот эта запись что значит?
C#
1
int?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.04.2019, 20:05
Цитата Сообщение от Talamaur Посмотреть сообщение
А вот эта запись что значит?
Значимый тип, которому можно присвоить значение null.
Если убрать вопросительный знак, то значение null присвоить нельзя, т.к. int — значимый тип.

Добавлено через 1 минуту
Цитата Сообщение от Talamaur Посмотреть сообщение
До этого момента я думал что весь код в Main берется в блок try
Так а куда вы из Main возвращаться-то собирались?
Main — входная точка в приложение, из него вернуться можно только обратно в ОС, то есть закрыть приложение.
Завершение метода Main = завершение работы приложения.
0
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
26.04.2019, 10:59  [ТС]
F чтобы вернуться снова на ввод значения надо организовать цикл do-while? Но почему то while ругается на value.
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
static int? ReadInt()
        {
            try
            {
                return int.Parse(Console.ReadLine());
            }
            catch (FormatException)
            {
                Console.WriteLine("Ошибка ввода.");
                return null;
            }
        }
        static void Main(string[] args)
        {
            int? value;
            do
            {
            value = ReadInt();
            }
            while(value);
 
            Console.WriteLine("Значение: {0}", value);
            Console.ReadKey();
        }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.04.2019, 11:13
Talamaur, а что это условие должно делать и почему оно так написано
0
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
26.04.2019, 11:22  [ТС]
kolorotur, Вот я и думаю как организовать возврат в точку ввода значения. Так то да возврат в программу происходит, но не учитывается правильно ввели значение или нет. После вывода сообщения об ошибке, хочу снова вернуться на строку 18.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.04.2019, 12:05
C#
1
while (value == null)
Только зачем исключения, если их можно избежать?
0
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
26.04.2019, 12:31  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Только зачем исключения, если их можно избежать?
А как избежать неверного ввода? Покажите пример пожалуйста.
0
Эксперт .NET
 Аватар для Usaga
14307 / 9388 / 1355
Регистрация: 21.01.2016
Сообщений: 35,404
26.04.2019, 13:19
Talamaur, вам в посте №2 это показали: int.TryParse
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
26.04.2019, 13:20
Talamaur, первое же сообщение в этой теме...
0
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
26.04.2019, 13:44  [ТС]
C#
1
static int ReadInt(string prompt, Predicate<int> condition = null)
condition = null это необязательный параметр как я понял?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.04.2019, 14:40
Цитата Сообщение от Talamaur Посмотреть сообщение
condition = null это необязательный параметр как я понял?
Да.
0
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
26.04.2019, 23:26  [ТС]
А вот в реальных проектах как отлавливают такие ситуации и вообще сами эксепшены? Неужели таким банальным методом? У меня вообще впечатление что он не нужен вовсе. Только в учебных целях в консольных прилажениях побаловаться. Проясните пожалуйста мне этот вопрос пожалуйста.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
27.04.2019, 01:09
Цитата Сообщение от Talamaur Посмотреть сообщение
А вот в реальных проектах как отлавливают такие ситуации и вообще сами эксепшены?
Да так же. Catch он везде catch.

Цитата Сообщение от Talamaur Посмотреть сообщение
Неужели таким банальным методом?
Разберите любой сложный агрегат и вы увидите банальные винтики да шпунтики.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2019, 01:09
Помогаю со студенческими работами здесь

Почему нельзя использовать переменную из блока try/catch
Вечер добрый. import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import...

Передача исключения из одного catch-блока в другой
Всем привет! Начал тут изучать исключения в С++, хотел бы кое-что прояснить. Если я всё правильно понял, процесс обработки исключений...

Нет доступа к базе данных. Пишет уведомление из блока catch
Собственно, пытаюсь показать в лейбле данные из таблицы, но пишет ошибку из блока catch, кто-нибудь знает как это исправить? void...

Возврат в начало функции из блока Switch
Можно ли вернуться как-то из switch(deystvie)/(deystvie2) или из любого его case в самое начало (меню)? Если да, то как? #include...

Конструкция try catch в цикле while. Зацикливается блок catch
Здравствуйте. Столкнулся с проблемой: при попытке запихнуть в цикл конструкцию try catch - зацикливается часть, расположенная в блоке...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru