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

コンソール入力バッファをフラッシュします。現在入力バッファにあるすべての入力レコードが破棄されます

この関数にバグがありますか、それとも間違っていますか?

4

1 に答える 1