Другие языки программирования и технологии

Pascal. Write/read and etc

Алгоритм:
Вывод 'x['
ввод пользователем числа
вывод _в ту же строку_ ']='
ввод другого числа

Write('X['); read(im); Write(']='); read(chm); ---душевно реагирует на enter, разбивая строку надвое, а я огорчаюсь :с

Есть идеи? ASCII не помогает.
Возврат курсора в позицию после введённого первого числа:

program N75661260;
uses crt;
var
ims: string;
im, chm, e, x, y: integer;
c: char;
begin
write('X[');
x := WhereX;
y := WhereY;
read(ims);
GotoXY(x + length(ims), y);
val(ims, im, e);
write(']=');
readln(chm);
writeln('im = ', im, 'chm = ':10, chm);
readkey
end.

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

program N75661260;
uses crt;
var
ims: string;
im, chm, e: integer;
c: char;
begin
write('X[');
ims := '';
repeat
c := readkey;
case c of
'0' .. '9': begin
ims := ims + c;
write(c)
end;
#08: if length(ims) > 0 then
begin
ims := copy(ims, 1, length(ims) - 1);
write(#8#32#8)
end
end
until c = chr(13);
val(ims, im, e);
write(']=');
readln(chm);
writeln('im = ', im, 'chm = ':10, chm);
readkey
end.

Этот редактор реагирует на клавиши цифр, Enter и Backspace.
По-хорошему, можно добавить реакцию на клавиши стрелок влево и вправо, Delete и Insert и добавить например блокировку клавиши Enter, если введённая строка не является корректным числом.
Получится полноценный однострочный редактор с проверкой ввода.

P.S. Обе программы будут работать лишь в тех реализациях, где есть модуль crt или аналогичный. Проверено в Turbo и Free Pascal. Для Delphi придётся искать модуль эквивалентный crt.

Андрей Степанов
Андрей Степанов
51 590
Лучший ответ
А по-русски можешь объяснить? Ничего не понятно.

Хотя подожди. Понял.

Тебе нужно использовать функцию getch().

char ch;
char im[256] = {""};
int l:=0;

Write('X[');
ch := getch();
while(ch <> Enter); {
im[l]:=ch;
inc(l);
ch := getch();
}
Write(']=');

Как то так. По памяти писал, поэтому могут быть ошибки.
Там где написано ch <> Enter тебе нужно проверить, что нажатый символ - не Энтер. Нужно проверять по ASCII коду.
Witalik Hein
Witalik Hein
10 390