我正在尝试使用 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文档,应清理控制台输入缓冲区:
刷新控制台输入缓冲区。当前在输入缓冲区中的所有输入记录都被丢弃
这个功能有错误,还是我做错了?