![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Ситуация в том что программа не реагирует на нажатие клавиш, за исключением определенных случаев.
1) если не вызывать ф-цию stPop (либо дважды вызывать перед ней stPush) 2) если превратить ф-ции stPop и stPush в процедуры (вырезав только result:=) 3) если подключить модуль crt, и использовать родной readkey из стандартной библиотеки crt Код:
{$MODE OBJFPC}
program main;
//uses crt;
uses keyboard;
type
PList = ^TList;
TList = record
Data: byte;
prev: PList;
Next: PList;
end;
var
c:char;
dat:byte;
st:Plist;
function readkey(iswait: boolean = False): char;
var
key: tkeyevent;
begin
if iswait = True then
Key := PollKeyEvent;
if key <> 0 then
begin
Key := GetKeyEvent;
Key := TranslateKeyEvent(Key);
end;
Result := GetKeyEventChar(Key);
end;
function stEmpty(aList: Plist): boolean;
begin
Result := (aList = nil);
end;
function stPush(var aList: PList; aData: byte): PList;
var
p: PList;
begin
new(p);
p^.Data := aData;
p^.prev := aList;
alist := p;
Result := p;
end;
function stPop(var aList: PList; var aData: byte): PList;
var
p: PList;
begin
Result := nil;
if stEmpty(aList) then
exit;
p := alist;
alist := alist^.prev;
Result := p^.prev;
dispose(p);
end;
begin
initkeyboard;
stPop(st,dat);
repeat
c:=readkey;
//------
until c=#27;
end.Компилятор fpc 2.6.4 |
|
#2
|
|||
|
|||
|
Естественно, не реагирует.
Она у тебя входит в бесконечный цикл, бо как в таком варианте нифига не считывает с консоли - просто подумай, с каким параметром вызывается readkey, когда он вызван без параметров, а потом внимательно посмотри тело этой функции... Подсказка. А как твоя функция readkey получит хоть какое-то значение в локальную переменную key? Я скорее удивлен, что она как-то реагирует в 1 и 2 случае... Про 3й случай понятно - там явно правильная реализация readkey. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
kkrk (31.12.2015)
| ||
|
#3
|
|||
|
|||
|
Благодарю)
|