11 / 11 / 3
Регистрация: 16.10.2012
Сообщений: 139
1

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

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

Author24 — интернет-сервис помощи студентам
В учебной задачке необходимо обрабатывать все исключительные ситуации. Через блок 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2013, 16:42
Ответы с готовыми решениями:

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

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

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

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

5
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
27.03.2013, 16:47 2
Хм... запихните все действия в теле функции в один блок 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  [ТС] 3
И всё-таки это не выход. У меня куча блоков кода, которые нужно проверять отдельно.
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
27.03.2013, 23:13 4
Цитата Сообщение от lpvoid Посмотреть сообщение
try ... catch ... finally, и перехватывайте просто Exception.

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


AlexanderWM, Переделайте архитектуру. Соблюдайте инкапсуляцию. Обрабатывайте нужные исключения внутри объектов и вам останется всего лишь обработать работу с юзером
( а то и класс запилить для него и сделать все там)
0
34 / 27 / 6
Регистрация: 31.03.2012
Сообщений: 115
27.03.2013, 23:24 5
Эммм... Можно вопрос - зачем при парсе вообще 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,273
27.03.2013, 23:33 6
Цитата Сообщение от 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
27.03.2013, 23:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2013, 23:33
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru