Форум программистов, компьютерный форум, киберфорум
Наши страницы

Pascal ABC

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Ksenia S
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 63
#1

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

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

Помогите пожалуйста написать код, чтобы программа выполнялась только при вводе цифр, а при попытке ввода других символов выдавалось сообщение о том, что стоит повторить попытку. до тех пор,пока не будут введены цифры
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 23:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Защита от ввода неверного типа данных (Pascal ABC):

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

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

Защита от неправильного ввода при заполнении массива - Pascal ABC
Хочу чтобы, когда я ввел буквы вышло 'Ошибка', я сделал это через val, без проверки всё работает, 9 цифр ввожу, а вот щас после val...

Реализовать повтор ввода данных в программу или отказ от ввода - Pascal ABC
Программа должна вычислять произведение двух чисел и спрашивать завершать программу или нет, если нет то продолжать запрашивать данные...

Исходя из условия задачи, определить структуру комбинированного типа данных и типа полей - Pascal ABC
P.S-заголовок: Исходные данные разместить в текстовом файле. В программе не использовать массивов записей. Результаты выводить на экран и в...

Игнор ввода переменной типа string - Pascal
Имею код: type team=record name,town,tren:string; pt,dif:byte; end; procedure creatio(name:string); var db:file of team;...

2
Mawrat
12820 / 5728 / 676
Регистрация: 19.09.2009
Сообщений: 8,807
06.10.2013, 11:56 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Зависит от того, что требуется - можно организовать ввод последовательности цифр, как строки. Или можно организовать ввод последовательности цифр, которую при чтении следует воспринимать, как запись числа. Здесь надо учитывать, что число может быть со знаком "+" или "-".

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
Ksenia S
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 63
06.10.2013, 12:14  [ТС] #3
Спасибо!)))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2013, 12:14
Привет! Вот еще темы с ответами:

Составить программу для ввода данных о студентах, проживающих в общежитии, и записи этих данных в файл - Pascal
Работа с комбинированными данными: Необходимо составить программу для ввода данных о студентах, проживающих в общежитии, и записи этих...

Обработка данных типа запись (комбинированный тип данных). - Pascal
Вывести ФИО и отметки по физике студентов, имеющих средний балл, больше 4,5. Помоги пожалуйста.... Заранее спасибо)))

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

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


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

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

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