Альтернатива getch - PullRequest
       18

Альтернатива getch

1 голос
/ 17 октября 2010

Как известно большинству, getch ждет, пока пользователь нажмет клавишу, а затем вернет значение. Есть ли способ, чтобы просто проверить, нажимает ли пользователь в данный момент клавишу? Вот что я пытаюсь сделать:

while(1){
char x = getch();
if (x){
//blah
}
else if(y == true){
//blah
}
}

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 17 октября 2010

Есть функция kbhit() (или _kbhit(), если вы используете библиотеки Microsoft).

MSDN: http://msdn.microsoft.com/en-us/library/58w7c94c(VS.80).aspx

"_ kbhit возвращает ненулевое значение, если ключ имеетбыла нажата. В противном случае возвращается 0. "

РЕДАКТИРОВАТЬ: Как отметили некоторые комментаторы, это не стандарт.

0 голосов
/ 18 октября 2010

Если вы просто хотите приостановить выполнение сценария до нажатия клавиши, то getch работает, но если вы хотите, чтобы символ, который они нажимали, НЕ появлялся на экране (или вам не важно, какую клавишу они нажимали), вы можно использовать

system("pause > NUL");

Он вызывает команду Windows "пауза" и маршрутизирует отображаемый текст и ввод (обычно он говорит "Нажмите любую клавишу, чтобы продолжить ...") в пустую пропасть.

Альтернативой является использование функции, подобной GetAsyncKeyState (), и циклическое прохождение всех входных кодов, чтобы увидеть, нажата ли какая-либо клавиша в данный момент. Этот метод работает намного лучше, если вы пытаетесь запустить цикл обработки и хотите отключиться, когда пользователь нажимает определенную клавишу (например, Escape). Использование его для проверки, нажимает ли пользователь какую-либо клавишу, потребует значительных затрат вычислительной мощности.

...