Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
11 / 11 / 3
Регистрация: 16.10.2012
Сообщений: 139

Обработка исключений

27.03.2013, 16:42. Показов 932. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В учебной задачке необходимо обрабатывать все исключительные ситуации. Через блок try-catch-finally. Вот небольшой метод, где всё работает, так как я и задумал.
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
  static int[] Input()
        {
 
                Console.WriteLine("Введите размерность массива");
                int n = int.Parse(Console.ReadLine());
                int[] a = new int[n];
                
            for (int i = 0; i < n; ++i)
            {
                
            lets:try
                {
                    Console.Write("a[{0}]= ", i);
                    a[i] = int.Parse(Console.ReadLine());
                }
                catch (System.FormatException)
                {
                    Console.WriteLine("Ошибка ввода - пробуем ещё раз!");
                    goto lets;
                
                }
                
            }
            return a;
        }
Но при попытке использовать ещё один такой блок возле int n = int.Parse(Console.ReadLine()); VS выдаёт ошибку The name 'n' does not exist in the current context. Если переменные внутри фигурных скобок не видимы для других частей программы - то почему работает второй блок? И вообще - как правильно работать с исключительными ситуациями в этом случае?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2013, 16:42
Ответы с готовыми решениями:

Обработка исключений
Опять написал небольшую утилитку для работы с реестром Windows. Точнее программа удаляет некоторые разделы реестра, а потом их пустыми...

Обработка исключений
С#. Как обработать исключительную ситуацию с извлечением числа из-под корня через try и catch

Обработка исключений
Задание Используя Visual Studio, создайте проект по шаблону Console Application. Создайте класс Calculator. В теле класса...

5
 Аватар для lpvoid
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
27.03.2013, 16:47
Хм... запихните все действия в теле функции в один блок try ... catch ... finally, и перехватывайте просто Exception.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static int[] Input()
{
     try
     {
          // ... actions
     }
     catch(Exception e)
     {
          // ... catch
     }
     finally
     {
          // ... actions
     }
}
1
11 / 11 / 3
Регистрация: 16.10.2012
Сообщений: 139
27.03.2013, 20:42  [ТС]
И всё-таки это не выход. У меня куча блоков кода, которые нужно проверять отдельно.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
27.03.2013, 23:13
Цитата Сообщение от lpvoid Посмотреть сообщение
try ... catch ... finally, и перехватывайте просто Exception.

А вы случайно не знаете чит на бессмертие?


AlexanderWM, Переделайте архитектуру. Соблюдайте инкапсуляцию. Обрабатывайте нужные исключения внутри объектов и вам останется всего лишь обработать работу с юзером
( а то и класс запилить для него и сделать все там)
0
 Аватар для Resst
34 / 27 / 6
Регистрация: 31.03.2012
Сообщений: 115
27.03.2013, 23:24
Эммм... Можно вопрос - зачем при парсе вообще try-catch юзать?

В цикл впишите:
C#
1
2
3
4
 Console.Write("Введите {0}-й элемент массива: ", i);
            while (!int.TryParse(Console.ReadLine(), out a[i]))
                Console.WriteLine("Ошибка! Необходимо ввести натуральное число! ");
            return a[i];
То же самое и для размерности:
C#
1
2
3
4
5
Console.Write("Введите размерность массива: ");
int n;
            while (!int.TryParse(Console.ReadLine(), out n)|| choice < 1)//сюда еще проверку на положительность прилепила
                Console.WriteLine("Ошибка! Необходимо ввести натуральное число! ");
            return n;
Что дальше с массивом-то делать? Скорей всего там как раз и надо исключения отлавливать...
1
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
27.03.2013, 23:33
Цитата Сообщение от AlexanderWM Посмотреть сообщение
Но при попытке использовать ещё один такой блок возле int n = int.Parse(Console.ReadLine()); VS выдаёт ошибку
Если не говорить о качестве кода, а только об этой проблеме, то можно сказать так:

Образно говоря переменная, "рожденная" внутри скобок, "умрет" с их закрытием.
У Вас так и произойдет, если сделать
C#
1
2
3
4
5
6
7
8
9
            try
            {
             int n = int.Parse(Console.ReadLine());
            }
            catch
            {
            }
 
                int[] a = new int[n]; // для этого кода переменной n уже не существует
Вам нужно, что бы переменная ко времени создания массива int[] a еще "существовала".

Например так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
            int n=0;
 
            Console.WriteLine("Введите размерность массива");
            try
            {
              n = int.Parse(Console.ReadLine());
            }
            catch
            {
            }
 
                int[] a = new int[n];
 
   //...............
}
Почитайте, что такое область видимости и что такое локальные и глобальные переменные
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.03.2013, 23:33
Помогаю со студенческими работами здесь

Обработка исключений
Есть задания 1.Написать пример программы по обработке различных типов исключений. Программа должна быть проектом Windows Form и...

Обработка исключений
Здравствуйте! Такая проблема, что надо сделать обработку исключений, если пользователь вместо цифры введет букву в textBox. Практически все...

Обработка исключений
Подскажите как обрабатывать исключение пока оно не исчезнет. Например: System.IO.Ports.SerialPort rs_port; ...

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

Обработка исключений
Можно ли в методе А1 обработать исключение, которое создаётся методом А3? Вот схематическое изображение кода. void A1() { ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru