Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 12.10.2018
Сообщений: 24
1

При ложном условии все равно выполняется catch

12.10.2018, 21:51. Просмотров 1656. Ответов 2
Метки нет (Все метки)

Необходимо ввести число в двоичном виде. При проверке на содержание нечисловых символов, даже при ложном условии выполняется блок catch.
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Binary
{
    class BinaryNumbers
    {
        string first;
        string second;
 
        public void Input()
        {
            link1:
            try
            {
                Console.Write("Введите первое двоичное число:");
                first = Console.ReadLine();
                char[] f = new char[first.Length];
                for (int i = 0; i < first.Length; i++)
                {
                    if (Char.IsDigit(first[i]) == false)
                    {
                        throw new Exception("Неверное двоичное число!");
                    }
                    else
                    {
                        if (Convert.ToInt32(first[i]) > 1)
                            throw new Exception("Неверное двоичное число!");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                goto link1;
            }
 
            link2:
            try
            {
                Console.Write("Введите второе двоичное число:");
                second = Console.ReadLine();
                for (int i = 0; i < second.Length; i++)
                {
                    if (Char.IsDigit(second[i]) == false)
                    {
                        throw new Exception("Неверное двоичное число!");
                    }
                    else
                    {
                        if (Convert.ToInt32(second[i]) > 1)
                            throw new Exception("Неверное двоичное число!");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                goto link2;
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            BinaryNumbers Process = new BinaryNumbers();
            Process.Input();
            Console.ReadKey();
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2018, 21:51
Ответы с готовыми решениями:

Как найти для этих условии 2 парных чисел а и b при котором выполняется все условии?
Мой пример кода был таким данный момент но не работал. В экране пустота. Ничего не выводится. Где у...

В коде используется Try catch, но все равно выбрасывается необработанное исключение
Подскажите, у меня код находится в: try { ...... } catch (Exception e) { ...

Не работает макрос при условии выполнении макрокоманды равно 0
Данный макрос должен отображать просроченные договора по двум условиям: 1. Если...

Почему цикл выполняется при любом условии?
Доброго времени суток! procedure TForm1.reversPos; var countsPosition: Integer; begin ...

2
Модератор
6460 / 4563 / 1288
Регистрация: 21.04.2018
Сообщений: 13,244
Записей в блоге: 2
12.10.2018, 22:25 2
Лучший ответ Сообщение было отмечено SteelWing_RC как решение

Решение

Цитата Сообщение от SteelWing_RC Посмотреть сообщение
Необходимо ввести число в двоичном виде. При проверке на содержание нечисловых символов, даже при ложном условии выполняется блок catch.
У Вас не верный подход к реализации задания. Конструкция try... catch... предназначена для реакции на ИСКЛЮЧЕНИЯ, то есть на непрогнозируемую исключительную ситуацию. В Вашем случае надо проверить корректность данных на конвертацию. Это не относится к ИСКЛЮЧИТЕЛЬНЫМ ситуациям. Вам надо использовать методы TryParse вместо Convert или Parse. Код станет намного удобнее, читабельнее и, соответственно, менее подвержен ошибкам.
1
Эксперт .NET
13700 / 10591 / 2788
Регистрация: 17.09.2011
Сообщений: 17,969
12.10.2018, 23:04 3
Лучший ответ Сообщение было отмечено SteelWing_RC как решение

Решение

Цитата Сообщение от SteelWing_RC Посмотреть сообщение
C#
1
Convert.ToInt32(second[i])
Этот метод вернет порядковый номер символа в таблице юникода, потому для любой буквы алфавита условие всегда будет true.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2018, 23:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не выполняется условие или почему данные все равно переползают в S2?
Всем привет! Почему в строке S2 тоже заносятся пятерки, когда их туда не должно пускать условие?...

Больше или равно в условии балансировки
def rebalance(self, node): # Rebalance while node is not None: update_height(node) if...

Как сделать при событии один пункт активным, а все остальные неактивны при условии что это общая функция
Вот к примеру: http://jsbin.com/uhiqap/1/edit на галерею когда клацаешь - чтоб была одна...

Заменить все совпадения при условии что
Допустим есть текст $text = &quot;{if_admin} {if_admin}&quot;; Если $_SESSION == &quot;admin&quot; то заменяем...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.