ReadFile only returns 换行后

ReadFile only returns after newline

我正在尝试实时读取控制台中按下的每个字符。
我正在使用 ReadFile 从 stdin 读取,但它似乎只在换行符后(当我按回车键时)完成读取操作。
这是我的代码:

    char buf[1] = { 0 };
    HANDLE stdInHandle = GetStdHandle(STD_INPUT_HANDLE), stdOutHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    while (true) {
        ReadFile(stdInHandle, buf, sizeof(buf), NULL, NULL);
        WriteFile(stdOutHandle, buf, sizeof(buf), NULL, NULL);
    }

我如何读取实时按下的字符,而不是在换行符之后?

正如我在评论中提到的,您可以使用 SetConsoleMode 来禁用行缓冲:

#include <windows.h>

int main()
{
    HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
    HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);

    // Get the current console mode
    DWORD mode;
    GetConsoleMode(hInput, &mode);

    // Save the current mode, so we can restore it later
    DWORD original_mode = mode;

    // Disable the line input mode
    mode &= ~ENABLE_LINE_INPUT;

    // And set the new mode
    SetConsoleMode(hInput, mode);

    // Then read and write input...
    for (;;)
    {
        TCHAR buffer[1];
        DWORD nread = 0;

        // TODO: Need to add some error checking here!
        ReadConsole(hInput, buffer, 1, &nread, nullptr);
        WriteConsole(hOutput, buffer, nread, nullptr, nullptr);

        // Allow some way to exit the program
        if (buffer[0] == 'q' || buffer[0] == 'Q')
        {
            break;
        }
    }

    // Restore the original console mode
    SetConsoleMode(hInput, original_mode);
}