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 は一度に 1 文字 (改行を含む) を読み取り続けますが、FlushConsoleInputBuffer 呼び出しの後でも残りの入力は破棄されません。たとえば、1 文字を入力すると、「Enter text:」が 3 回表示されます。2 文字入力の場合は 4 印刷、などです。FlushConsoleInputBuffer documentationによると、コンソール入力バッファーを消去する必要があります。
コンソール入力バッファをフラッシュします。現在入力バッファにあるすべての入力レコードが破棄されます
この関数にバグがありますか、それとも間違っていますか?