Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Ввод с клавиатуры

Автор: Dunkel_L 11.12.2007 5:05

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


procedure menu1;
var Key: Word;
var m:set of ord('0')..ord('9');
begin
m:=[ord('0'),ord('1'),ord('2'),ord('3'),ord('4'),ord('5'),ord('6'),ord('7'),ord('8'),ord('9')]+[ord(',')];
if (not(key in m)) and (key<>ord(','))
then
readln(Key);


Автор: neic 11.12.2007 5:49

Вот тут сделал, думаю то что тебе нужно:

var s:char;
...
writeln('Введите символы. Конец ввода "*":');
Repeat
read(s)
If (s='1') or (s='2') or (s='3') or (s='4') or (s='5') or (s='6') or (s='7') or( s='8') or (s='9') or (s='0') or (s=',') then
begin
...
end;
Until s='*';

Автор: volvo 11.12.2007 6:12

blink.gif

Я бы сделал так:

uses crt;
var s:char;
begin
writeln('Вводите символы (Enter - конец ввода):');
Repeat

s := readkey;
If s in ['0'..'9', ','] then begin
write(s);
{
здесь - если надо еще что-то сделать с разрешенными символами,
например, можно записать их в строку...
}
end;

Until s = #13;
end.


Автор: neic 11.12.2007 6:15

volvo
Чёрт smile.gif И точно, можно было и так сделать smile.gif
Просто не задумывался над readkey.

Автор: volvo 11.12.2007 6:17

Внимательнее задания надо читать, тогда будешь задумываться. Ясно было сказано:

Цитата
все остальные клавиши просто игнорировать.
У тебя вводится все подряд - не игнорируется вообще ничего, потому как проверка ПОСЛЕ ввода...

Автор: neic 11.12.2007 6:30

Понял. Не догнал задание не много. blush.gif