在我按下 <enter> 之前,在 stdinput 上读取的控制台应用程序不会 return

Console app read on stdinput do not return until I press <enter>

当我这样做时:

    var ch: char;
    read(ch);

只有当我按下“回车”时,读取命令才会退出。如何在输入字符后立即读取 return?

你用错了功能。 Read 是标准(旧式 Pascal)函数的一部分,用于从标准输入或文件中读取内容。如您所见,它是基于行的。

解决您在 Windows 下的问题的一种方法,如果使用控制台 API,特别是 ReadConsoleInput,如下所示:

program ReadConsoleInputDemo;
{$APPTYPE CONSOLE}
uses
    System.Sysutils, Winapi.Windows;
var
    Event      : TInputrecord;
    EventsRead : DWORD;
    Done       : Boolean;
begin
    WriteLn('Type something, ESC ends program');
    Done := False;
    repeat
        ReadConsoleInput(GetStdhandle(STD_INPUT_HANDLE),
                         Event, 1, EventsRead);
        if Event.Eventtype = key_Event then begin
            if Event.Event.KeyEvent.bKeyDown then begin
                Done := Event.Event.KeyEvent.wVirtualKeyCode = VK_ESCAPE;
                if (not Done) and (Event.Event.KeyEvent.AsciiChar <> #0) then
                     WriteLn('You typed: ', Event.Event.KeyEvent.AsciiChar);
            end;
        end;
    until Done;
end.