我基本上是在制作自己的控制台 I/O(所以没有 cout、cin 等),但有时当我读取输入时,我不会读取缓冲区上的所有字符,因为我可以选择我想要的数量读。但下次我调用
ReadConsoleA/W()
时,它不会等待用户输入,因为它会读取缓冲区中剩余的内容。我尝试了FlushConsoleInputBuffer()
但没有成功。这基本上是我所拥有的:
#inlcude <windows.h>
// These globals are here just for the example
DWORD bytes;
HANDLE in;
HANDLE out;
void WrtConsole(const char* text, DWORD size)
{
WriteConsoleW(out, text, size, &bytes, 0);
}
void ReaConsole(char* text, DWORD max_size)
{
FlushConsoleInputBuffer(in);
ReadConsoleA(in, text, max_size, &bytes, 0);
}
// Im using `int WINAPI mainCRTStartup()`, but it doesnt matter, Im just not using any iostream things.
int main()
{
out = GetStdHandle(STD_OUTPUT_HANDLE);
in = GetStdHandle(STD_INPUT_HANDLE);
char num1[4];
char num2[4];
WrtConsole(L"First number: ");
ReaConsole(num1, 4);
WrtConsole(L"Second number: ");
ReaConsole(num2, 4);
// ...
}
现在,例如,如果用户输入 3 位数字,例如 100,则
ReadConsole()
函数将读取“1”、“0”、“0”、“
'但会离开'
' 在输入缓冲区中,导致下一次调用 ReadConsole()
实际上只是跳过它。
正如我所说,
FlushConsoleInputBuffer()
不起作用,那么,如何清除控制台的输入缓冲区,以便下次调用ReadConsole()
时不会“跳过”?