Я хочу использовать kbhit() для функции «Нажмите любую клавишу, чтобы продолжить». Однако после того, как я использовал kbhit() в цикле, нажатие клавиши сохраняется в stdin. Итак, в следующем окне scanf() нажатие клавиши с предыдущего появляется во входе.kbhit() как триггер запуска
int x,b=0;
printf("Press any key to continue...")
while (b==0) {
b=kbhit();
}
system("cls");
printf("Enter number:");
scanf("%d",&x);
Итак, если пользователь нажал клавишу, скажем букву K, после «Enter number:» появится k.
Я пробовал искать решения, но не смог заставить их работать. Я попытался поместить символ обратного хода во входной поток. Я также пробовал использовать getch(), однако пользователь должен нажать «Enter», чтобы продолжить, поэтому он побеждает исходную цель. Я также попытался очистить поток stdin, закрыв и открыв, но я не могу заставить его нормально открываться.
EDIT: Как я сказал в комментариях, все, что мне нужно, это использовать систему («пауза»). Хотя я не могу редактировать. Как сказал в комментариях janisz, все, что мне нужно, это использовать систему («пауза»). Хотя я не могу отредактировать «Нажмите любую клавишу, чтобы продолжить», это достаточно для моей цели. Я буду продолжать использовать другие решения, предлагаемые здесь для получения лучших результатов, если это возможно, но на данный момент мне нужна система («пауза»).
EDIT2: Хорошо, некоторые из вас предложили использовать getch(). Из того, что я видел в Интернете, функция getch() получает входные данные из потока без отображения на экране символа, который я хочу. Однако, когда я попытался использовать getch(), программа не будет продолжена после нажатия любой клавиши, она ждет, когда я нажму клавишу ввода. Есть проблема? Я использую C-Free 4 Standard на Windows 7.
Посмотрите на добавление вызова в 'fpurge (FILE * поток)' функцию сразу после цикла. _purge_ стирает любые входные или выходные данные, буферизированные в данном потоке. Его можно найти в. –
Nocturno
fflush только поток потока потока. Это не сработало для меня. fpurge недоступен, его нет в моем stdio.h. Я думаю, что он доступен только для Linux. –
Вы можете использовать 'system (" pause ");' вместо 'kbhit()' – janisz