2

我正在尝试使用 Win32 API 循环读取控制台输入。我正在使用以下(简化)代码:

do {

    WriteConsoleW(hStdout, L"Enter text: ", wcslen(L"Enter text: "), NULL, NULL);

    if (!ReadConsoleW(hStdin, buf, 1, &nCharsRead, NULL)) {
        // ... Handle error...
    }

    if (!FlushConsoleInputBuffer(hStdin)) {
        // ... Handle error ...
    }

    // ... Handle input ...

} while (!bValid); 

但是,对于任何长度的输入,除非我退出循环 - ReadConsoleW 将继续一次读取一个字符(包括换行符),但即使在 FlushConsoleInputBuffer 调用之后,输入的其余部分也不会被丢弃。例如,如果我要输入一个字母 - 我会看到“输入文本:”打印了 3 次。对于 2 个字母输入,它将是 4 个打印件,依此类推。根据 FlushConsoleInputBuffer文档,应清理控制台输入缓冲区:

刷新控制台输入缓冲区。当前在输入缓冲区中的所有输入记录都被丢弃

这个功能有错误,还是我做错了?

4

1 回答 1

1

ReadConsoleW 函数将由回车键引起的换行添加为两个附加字符。

于 2014-02-06T17:50:27.430 回答