Помощь - Поиск - Пользователи - Календарь
Полная версия: ввод с клавы только цифр и вопросик о Eoln
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
DFooz
Какими способами можно ограничить ввод с клавиатуры только цифр?
Я пробую таким, но наверняка есть способ проще и лучше=)
Код
Var
  k:Char;
  st:String;

Begin
  Repeat
      k:=ReadKey;
      If k in ['0'.. '9'] then          
        begin
          st:=st+k;
          Write(k);
        end
      Else if (ord(k)) = 8 then
        begin
          delete(st, length(st), 1);
          GotoXY(1,WhereY);
          ClrEOL;
          Write(st);
        end
    Until k = #13;
END.


второй вопросик
если напр. написать этот код, то пишутся на экране только цифры
Код

Repeat
      k:=ReadKey;
      If k in ['0'.. '9'] then  
        begin
          st:=st+k;
          Write(k);
        end
    Until [b]k = #13[/b];
  END.

если же вместо k = #13 написать EOLN, то на экране появляются также буквы. Почему? Знаю, что EOLN писать здесь неправильно, но просто интересно, почему на экране пишутся буквы?
klem4
Цитата
Какими способами можно ограничить ввод с клавиатуры только цифр?


Вот пример вода числа, после переводи строку в число

uses crt;
var
s : string;
ch : char;

begin
clrscr;
s := '';
repeat
ch := readkey;
if ch in ['0'..'9'] then begin
s := s + ch;
write(ch);
end;
until ch = #13;
writeln;
writeln(s);
readln;
end.


А, ну так у тебя тоже самое и есть smile.gif

ps a EOLN у теб выполняется при первом вводе символа, так как после этого курсо указывает на конец строки, я так понимаю.
volvo
Цитата
наверняка есть способ проще и лучше
Я пользуюсь вот таким:
uses crt;

function get_digits: string;
var s: string; ch: char;
begin
s := '';
repeat
ch := readkey;
case ch of
#8:
begin
if length(s) > 0 then begin
write(#8,#32,#8);
delete(s, length(s), 1)
end
end;

'0' .. '9':
begin s := s + ch; write(ch) end
end;
until ch = #13;
writeln;
get_digits := s
end;

var
s: string;

begin
{ ... }
s := get_digits;
{ ... }
end.


Цитата
если же вместо k = #13 написать EOLN
А вот этого делать не стоит:
Цитата(Б.Поляков: Программирование в среде Турбо Паскаль)
Более того, от EoLn без параметра не дождетесь значения False. Она "Подвешивает" программу и возвращает управление следующему оператору только после нажатия ввода...
Так что эта функция тут неприменима вообще...
DFooz
что делают эти коды я вроде понял...#8-сдвиг курсора влево, #32-удаление
Код
write(#8,#32,#8);


но что это за конструкция такая? blink.gif Или где об этом почитать можно?=)

ЗЫ: никто не напишет, где можно скачать книгу Полякова или бооольшую статью о ЕОЛН почитать? rolleyes.gif

Цитата
ps a EOLN у теб выполняется при первом вводе символа, так как после этого курсо указывает на конец строки, я так понимаю.

меня просто интересует, почему он вообще буквы выписывает пр ЕОЛН, ведь кода на вывод букв нет...
volvo
Цитата
ведь кода на вывод букв нет...
А тот код, который есть НЕ выполняется! Программа переходит в режим ожидания нажатия Enter-а! В это время все, что ты будешь нажимать, будет отображаться.

Цитата
что это за конструкция такая?

write(
#8, { переходим на один символ левее }
#32, { "забиваем" то, что там было пробелом (фактически - удаляем последний символ С ЭКРАНА) }
#8 { и опять возвращаемся назад, т.к. при выводе пробела курсор опять сдвинулся вправо }
);
DFooz
ааа, понятно, спасибо=)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.