Я занимаюсь набором текста, в котором случайные алфавиты падают сверху вниз, и пользователю нужно нажать эту клавишу, чтобы получить оценку. Для создания эффекта падения используются две вложенные циклы. Внешний цикл while генерирует случайный алфавит и случайную позицию на оси x, в то время как внутренний цикл for увеличивает координаты оси y и печатает символы для каждого значения координаты y, чтобы заставить его упасть. Теперь проблема в том, что когда я использую функцию kbhit () в цикле for для проверки, нажали ли пользователи какую-либо клавишу или нет, она возвращает false, когда пользователь не нажал ни одной клавиши. Но когда пользователь нажимает клавишу в первый раз, он возвращает истину, и пользователь получает оценку. Но когда kbhit () вызывается снова для следующего случайного алфавита, он возвращает true независимо от того, нажал ли пользователь на клавиатуре или нет, потому что пользователь нажал ранее. Может быть, мне нужно очистить буфер клавиатуры, но я не знаю, как это сделать. Вот
while (true) {
ch = rand() % 26 + 65;
xPos = rand() % (x_end - x_start - 1) + x_start + 1;
for (int i = y_start + 1; i < y_end - 1 && !kbhit(); i++) {
cur_pos.X = xPos;
cur_pos.Y = i;
SetConsoleCursorPosition(console_handle, cur_pos);
Sleep(150);
cout << " ";
cur_pos.X = xPos;
cur_pos.Y = i + 1;
SetConsoleCursorPosition(console_handle, cur_pos);
cout << ch;
if (i == y_end - 2) {
cur_pos.X = xPos;
cur_pos.Y = i + 1;
SetConsoleCursorPosition(console_handle, cur_pos);
cout << ch;
Sleep(150);
cur_pos.X = xPos;
cur_pos.Y = i + 1;
SetConsoleCursorPosition(console_handle, cur_pos);
cout << " ";
}
}