Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/50: Рейтинг темы: голосов - 50, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 63

Защита от ввода неверного типа данных

05.10.2013, 23:51. Показов 10380. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать код, чтобы программа выполнялась только при вводе цифр, а при попытке ввода других символов выдавалось сообщение о том, что стоит повторить попытку. до тех пор,пока не будут введены цифры
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2013, 23:51
Ответы с готовыми решениями:

Защита от дурака в Паскале (от не того типа данных)
Конкретной задачи нет, интересует сугубо теория=) Предположим нам надо считать в консольном режиме любого паскаля переменную...

Составить процедуру для ввода данных в массив A(n) типа integer. Данные вводятся из типизированного файла типа integer, начиная с k-ой по n-ую
Составить процедуру для ввода данных в массив A(n) типа integer. Данные вводятся из типизированного файла типа integer, начиная с k-ой по...

Защита программы от неверного ввода
Написал программу, определяющую счастливый ли билет. То есть вводится шестизначное число и если сумма первых трех чисел равна сумме...

2
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
06.10.2013, 11:56
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Зависит от того, что требуется - можно организовать ввод последовательности цифр, как строки. Или можно организовать ввод последовательности цифр, которую при чтении следует воспринимать, как запись числа. Здесь надо учитывать, что число может быть со знаком "+" или "-".

1. Ввод целого числа. Первый способ.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program Project1;
 
var
  S : String;
  Num : Longint;
  Code : Integer;
begin
  Writeln('Задайте целое число:');
  repeat
    Readln(S);
    Val(S, Num, Code);
    if Code <> 0 then
      Writeln('Неверный ввод. Должно быть задано целое число. Пвторите.');
  until Code = 0;
  Writeln('Ввод завершён. Введено число: ', Num);
  Writeln('Чтобы выйти нажмите Enter.');
  Readln;
end.
2. Ввод целого числа. Второй способ.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
program Project1;
 
var
  S : String;
  Num : Longint;
  Code : Integer;
begin
  Writeln('Задайте целое число:');
  repeat
    {$I-} {Отключаем генерацию ошибок ввода/вывода.}
    Readln(Num);
    {$I+} {Включаем генерацию ошибок ввода/вывода.}
    Code := IOResult; {Читаем код результата выполнения операции.}
    if Code <> 0 then {Проверяем - была ли ошибка.}
      Writeln('Неверный ввод. Должно быть задано целое число. Повторите.');
  until Code = 0;
  Writeln('Ввод завершён. Введено число: ', Num);
  Writeln('Чтобы выйти нажмите Enter.');
  Readln;
end.
3. Ввод последовательности цифр. Первый способ - без возможности редактирования.
Pascal
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
program Project1;
 
uses
  Crt;
 
var
  S : String;
  Ch : Char;
  i : Integer;
begin
  Writeln('Задайте строку, в которой 1..8 десятичных цифр:');
  i := 0;
  repeat
    {Читаем очередной символ из стандартного входного файла.}
    Ch := ReadKey;
    {Если символ является цифрой, то добавляем его в строку.}
    if Ch in ['0'..'9'] then begin
      Inc(i);      {Подсчёт количества введённых цифр.}
      S := S + Ch; {Добавляем цифру в конец строки.}
      Write(Ch);   {Показываем цифру на экране.}
    end;
    {Выход из цикла в случае, если введена хотя бы одна цифра и нажат Enter,
    либо, если введено 8 цифр.}
  until ((Ch = #13) and (i >= 1)) or (i = 8);
  Writeln;
  Writeln('Ввод завершён. Введена строка: ', S);
  Writeln('Чтобы выйти нажмите Enter.');
  Readln;
end.
4. Ввод последовательности цифр с возможностью редактирования - можно использовать клавишу BackSpace (забой).
Pascal
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
program Project1;
 
uses
  Crt;
 
var
  S : String;
  Ch : Char;
  i, x, y : Integer;
begin
  Writeln('Задайте строку, в которой 1..8 десятичных цифр:');
  i := 0;
  repeat
    {Читаем очередной символ из стандартного входного файла.}
    Ch := ReadKey;
    {Если символ является цифрой, то добавляем его в строку.}
    case Ch of
      {Если введена десятичная цифра.}
      '0'..'9' :
      begin
        Inc(i);      {Подсчёт количества введённых цифр.}
        S := S + Ch; {Добавляем цифру в конец строки.}
        Write(Ch);   {Показываем цифру на экране.}
    end;
    {Если нажата клавиша BackSpace - т. е., дана команда стереть
    символ, расположенный слева от курсора.}
    #8 :
      if i > 0 then begin
        {Получаем координаты позиции, непосредственно слева от курсора.}
        x := WhereX - 1;
        y := WhereY;
        {Переходим к вычисленной позиции.}
        GotoXY(x, y);
        {Устанавливаем цвет текста таким же, как цвет фона.}
        TextColor(0);
        {Распечатываем последний символ строки цветом, совпадающим
        с цветом фона. Тем самым, стираем этот символ на экране.}
        Write(S[i]);
        {Устанавливаем обычный цвет текста - белый.}
        TextColor(7);
 
        Delete(S, i, 1); {Исключаем символ из строки.}
        Dec(i); {Исключаем символ из подсчёта.}
        Write(Ch); {Посылаем в стандартный выходной файл символ Ch = #8 (BackSpace).}
      end;
    end;
    {Выход из цикла в случае, если введена хотябы одна цифра и нажат Enter,
    либо, если введено 8 цифр.}
  until ((Ch = #13) and (i >= 1)) or (i = 8);
  Writeln;
  Writeln('Ввод завершён. Введено: ', S);
  Writeln('Чтобы выйти нажмите Enter.');
  Readln;
end.
1
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 63
06.10.2013, 12:14  [ТС]
Спасибо!)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2013, 12:14
Помогаю со студенческими работами здесь

Задание матрицы и её защита от неверного ввода количества элементов
Нужно задать матрицу, так что количество строк задаёт пользователь, а количество столбцов задаётся после считывания первой строки. После...

Контроль ввода даты и выдача сообщения в случае ошибки неверного ввода
Здравствуйте! У меня есть такая вот форма(скрин ниже). Смысл в том, что если пользователь введет в дате не дату(а там стоит тип данных -...

Контроль ввода даты в MaskEdit и выдача сообщения в случае ошибки неверного ввода
Всем доброго дня! Использую MaskEdit для ввода даты формат: dd/mm/yyyy Помогите написать обработчик выдачи ошибки в ShowMessage...

"Защита от дурака" ввода данных в форму HTML, как сделать несколько вариантов ввода текста?
Здравствуйте. Скажите, пожалуйста, как можно сделать при вводе текста в форму возможность ввода нескольких разных слов? Допустим, есть...

Защита от некорректного ввода данных
Необходимо, чтобы при вводе информации в DBGrid вводились только цифры и запятая. Помогите пожалуйста.


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru