Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/107: Рейтинг темы: голосов - 107, средняя оценка - 4.77
37 / 37 / 2
Регистрация: 11.11.2011
Сообщений: 423

Обработка исключений при неверном вводе данных

24.09.2013, 01:29. Показов 21799. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.Возникла проблема с реализацией исключения на ввод(необходимо,чтобы при вводе неправильного значения постоянно выводилось сообщение о повторе ввода.Как это реализовать с учётом моего кода?Примеры:
Код1:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
double x, y,R = 0;
            while (true)
            {
                try
                {
                    Console.WriteLine("Введите R");
                    R = double.Parse(Console.ReadLine());
                    Console.WriteLine("Введите Х");
                    x = double.Parse(Console.ReadLine());
                    Console.WriteLine("Введите Y");
                    y = double.Parse(Console.ReadLine());
                    if (Math.Pow(x, 2) + Math.Pow(y, 2) <= Math.Pow(R, 2) && x <= R && y <= R || x - y >= 0)
                        Console.WriteLine("True");
                    else
                        Console.WriteLine("False");
                    Console.ReadKey();
                }
                catch
                {
                    Console.WriteLine("Введите правильно значение:");
                }
            }

Код2:
Кликните здесь для просмотра всего текста
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
int R = 2;
            double x =0;
            double y = 0;
            Console.WriteLine("Введите х");
            while(x<=0 || x>=0)
            {
                try
                {
                    x = Double.Parse(Console.ReadLine());
                    if (x < -4 || x > 10)
                        Console.WriteLine("Интервал значений должен быть [-4,10]");
                    else if (x < -2)
                        y = x + 3;
                    else if (x < 4)
                        y = -0.5 * x;
                    else if (x < 6)
                        y = -2;
                    else
                        y = -Math.Sqrt(Math.Pow(R, 2) - Math.Pow((x - 8), 2)) - 2;
                    Console.WriteLine("y=" + y);
                    Console.WriteLine("Введите х");
                    
                }
 
                catch (FormatException)
                {
                    Console.WriteLine("Введите правильно значение X:");
                }       
             }
            
            Console.ReadKey();
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2013, 01:29
Ответы с готовыми решениями:

Обработка исключений при вводе числа
Здравствуйте! Как для данной строчки прописать исключение ( вводиться должны строго цифры 0-3), с помощью try/сatch? x =...

Обработка исключений при вводе числа, меньшего единицы
Как можно обработать исключение, чтобы при вводе числа меньше 1, выдалось сообщение? Добавлено через 2 часа 48 минут Вот например, я...

Повторный запуск процедуры при неверном вводе значения
Всем привет! Не могу запустить программу заново. Многие способы использовал, но программа все равно не хочет работать. Прошу подкинуть...

14
 Аватар для pokerface
209 / 174 / 48
Регистрация: 20.09.2012
Сообщений: 481
24.09.2013, 02:06
Вот как-то так... Не проверял, но смысл думаю ясен.
C#
1
2
3
4
5
6
7
Console.WriteLine("Введите R");
 
if (Char.IsNumber(Console.ReadLine(),0))
                {
                   R = double.Parse(Console.ReadLine());
                }
else {Console.WriteLine("Введите цифру, а не символ.");}
0
37 / 37 / 2
Регистрация: 11.11.2011
Сообщений: 423
24.09.2013, 06:49  [ТС]
Можно это как то реализовать циклом while?
0
 Аватар для pokerface
209 / 174 / 48
Регистрация: 20.09.2012
Сообщений: 481
24.09.2013, 08:20
Цитата Сообщение от ElectronicES Посмотреть сообщение
Можно это как то реализовать циклом while?
Не совсем понял что именно вы хотите зациклить...
поправил код, что писал выше, так как он не совсем правильный... вот так будет лучше (также писал без проверки. Пишите если что=)):
C#
1
2
3
4
5
6
7
8
9
10
11
string input = "";
string input2="";
input = Console.ReadLine();
 for (int i = 0; i < input.Length; i++)
            {
                if (Char.IsNumber(input,i)||input[i]=='.')
                {
                    input2 += input[i];
                    //input2 полюбому будет цифрой
                }
            }
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
24.09.2013, 08:43
-HPR-, у него и до этого работала проверка на исключение...
ElectronicES, При вводе значений R, X, Y - если ошибиться на Y, приходится заново вводить сначала все числа (R, X, Y). Вам нужно чтоб каждое число отдельно обрабатывалось на исключение. Если я вас правильно понял, то нужно вывести отдельный метод для ввода...
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
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Введите R: ");
            double r = Vvod();
 
            Console.Write("Введите X: ");
            double x = Vvod();
 
            Console.Write("Введите Y: ");
            double y = Vvod();
 
            Console.ReadKey();
        }
 
        static double Vvod()
        {
            while (true)
            {
                double i;
                if (double.TryParse(Console.ReadLine(), out i))
                    return i;
                else
                    Console.Write("Ошибка ввода! Введите еще раз: ");
            }
        }
    }
1
37 / 37 / 2
Регистрация: 11.11.2011
Сообщений: 423
24.09.2013, 14:16  [ТС]
Diman777, спасибо.То что нужно.
0
37 / 37 / 2
Регистрация: 11.11.2011
Сообщений: 423
10.10.2013, 00:25  [ТС]
Возникли снова вопросы по поводу исключений.Как обработать ввод NaN и вещественных чисел с порядком?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.10.2013, 00:38
ElectronicES, выше же пример есть? Все возможные виды обрабатываются с помощью TryParse, невозможные - не обрабатываются в принципе.
0
37 / 37 / 2
Регистрация: 11.11.2011
Сообщений: 423
10.10.2013, 00:50  [ТС]
Psilon, когда вводится NaN с клавиатуры,на экране любому из значений(x,y,R) присваивается значение NaN
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.10.2013, 01:10
ElectronicES, ну что-то в таком духе
C#
1
2
3
4
5
6
7
string s = Console.ReadLine();
if (s == "NaN")
   x = double.Nan;
else if (...)
...
else
   double.TryParse(s, out x)
0
37 / 37 / 2
Регистрация: 11.11.2011
Сообщений: 423
10.10.2013, 01:36  [ТС]
Psilon, не помогло...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.10.2013, 11:05
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static void Main()
{
    Console.Write("Enter number: ");
    double number = ReadDouble(IsNumber);
 
    Console.WriteLine("Kewl!");
}
 
static double ReadDouble(Predicate<double> validate = null)
{
    double result;
    while (!double.TryParse(Console.ReadLine(), out result) || (validate != null && !validate(result)))
        Console.Write("Invalid number, try again: ");
    return result;
}
 
static bool IsNumber(double value)
{
    return !double.IsNaN(value);
}
1
37 / 37 / 2
Регистрация: 11.11.2011
Сообщений: 423
10.10.2013, 16:32  [ТС]
kolorotur, можете объяснить как этот код работает?
P.S.Код помог спасибо.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.10.2013, 16:48
ElectronicES, запрос на ввод будет выдаваться до тех пор, пока пользователь не введет число, которое может быть представлено типом double или пока не пройдет пользовательская проверка, представленная делегатом validate.
То есть в метод ReadDouble можете передавать делегат на метод, принимающий на вход double и возвращающий bool. А можете ничего не передавать — тогда значение, вводимое с консоли, будет просто парситься в число.
1
37 / 37 / 2
Регистрация: 11.11.2011
Сообщений: 423
08.12.2013, 15:34  [ТС]
Снова возникла проблема.У меня есть +-*.Как осуществить проверку на ввод +-*? Т.е. нужно только вводить+-*
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.12.2013, 15:34
Помогаю со студенческими работами здесь

Как повторить ввод данных при неверном значении
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { ...

Обработка исключений при расчете формулы
День добрый, ткните плиз носом где я что не так сделал Суть в чем, нужно найти значения функций и записать их в различные массивы и...

Обработка исключений при арифметических операциях
Для заданного натурального k и действительного x подсчитать следующее выражение: Помогите пожалуйста. по заданию: 1)...

Обработка исключений при расчете формулы
Постройте таблицу значений функции y=f(x) для х с шагом h. Если в некоторой точке x функция не определена, то выведите на экран...

Обработка исключений try - catch при сканировании каталога
Напишите программу, которая сканирует некоторую папку (задаётся пользователем) с учётом поддиректорий, все хранящиеся в ней файлы...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Программный отбор элементов справочника Номенклатура по группе 1С
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника Сотрудники по перечислениям 1С
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru