为什么FlushConsoleInputBuffer不能按预期工作?

时间:2013-09-01 19:57:28

标签: winapi

我正在尝试使用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调用之后,其余的输入也不会被丢弃。例如,如果我输入一个字母 - 我会看到“输入文字:”三次打印。对于2个字母输入,它将是4个打印,依此类推。 根据FlushConsoleInputBuffer documentation,应该清理控制台输入缓冲区:

  

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

此功能是否有错误,或者我做错了?

1 个答案:

答案 0 :(得分:1)

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