Помощь - Поиск - Пользователи - Календарь
Полная версия: Форматирование ввода-вывода
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Rishat
Кто знает как можно ограничить пользователя при вводе данных - я имею ввиду есливводимое данное должно быть целочисленное -чтобы он ... не мог
там запятую или точку ввести - чтоб она у него не печаталась а токмо
цифры от 0...9 и длинну скажем только 4 символа
Я такую штуку наблюдал в калькуляторе винды - там буквы не печатаются
Заранее спасибо
Altair
Цитата
чтобы он *** не мог

А ругаться зачем? Советую изменить сообщение, а то модератор увидит и ...
----
Ограничить можно, только надо вводить данные не с помощью Read а написать свою процедуру.
ОБЩАЯ СХЕМА:
1 считать из буфера символ нажатой клавиши.
2 проверьть его ASCII код
3 в зависимости от того, правильно ли введены данные, отобразить на экран (эхо)
4 записать данные
5 перейти на 1.
(в пункте 5 я написал перейти- это не значит использовать GOTO, это просто для наглядности. )
Dark
могу дать на асме =)
Altair
А есть еще один способ (экзотический).
Пусть вводит юзер, что хочет, а программа должна иметь обработчик ошибок исполнения (Runtime Error). Если юзер ввел вместо 0 (ноль) О (буква О) , то
произойдет ошибка, а обработчик ошибок вернет программу на точку ввода переменной. Подобный способ подробно описан в книге Turbo Pascal Фаронова.
----
Мне больше нравится этот способ, т.к. используя обработчик ошибок мы сразу предупреждаем все ошибки.
APAL
И опять все пошли в дебри...
Господа, не надо усложнять - асм, буфер, обработчики...
Хорошо елси Rishat имеет представление об этом, а если нет?

Начинайте с самого простого и доступного - READKEY пусть "поюзает".



P.S.: Oleg_Z:
Цитата
а то модератор увидит и ...

:D (глаз за глаз) smile.gif
Dark
Хм... =) ты прав
что то я совсем заассемблился ;)
Atos
Код

uses crt;
function reading:string;{Читает строку из четырёх цифр}
var i:byte;
   ch:char;
   str:string[4];
begin
clrscr;
i:=0;
str:='';
repeat
ch:=readkey;
if (ord(ch)>=48) and (ord(ch)<=58) then
    begin
    str:=str+ch;
    inc(i);
    write(ch);
    end;
until (i=4);
reading:=str;
end;

begin
write(' vveli ',reading);
readln;
end.
Altair
А мне вот, что в голову пришло:
более простой способ, чем юзанье readkey - это вводить все в строку!
Ведь в строку можно ввести все, что угодно буз ошбки,
а если надо перевестив число, то есть процедура val.
По моему это самый простой метод!
Rishat
</span><span style='font-family:arial'>Большое Спасибо всем особливо Атосу и
Олегу -вот что я получил в результате
Код
program idea2;
uses crt;
var
 a,b:integer;
 r:integer;
function reading(var r:integer):string;
var i:byte;
  ch:char;
  str:string[4];
begin
i:=0;
str:='';
repeat
ch:=readkey;
if (ord(ch)>=45) and (ord(ch)<=58) then
   begin
   str:=str+ch;
   i:=length(str);
   write(ch);
   end;
until (i=4);
writeln;
val(str,r,b);
end;
begin
clrscr;
write(' vvedi chislo');
reading(r);
writeln;
writeln('vi vveli',r);
readln;
end.
Altair
пожалуйста возьмите в тег [ code] -только без пробула
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.