我正在尝试使用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,应该清理控制台输入缓冲区:
刷新控制台输入缓冲区。当前在输入缓冲区中的所有输入记录都将被丢弃
此功能是否有错误,或者我做错了?
答案 0 :(得分:1)
ReadConsoleW函数将enter键引起的换行符添加为两个附加字符。