|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
Благодарю)
|