Есть такая функция в библиотеке <conio.h> - int kbhit(void), которая возвращает ненулевое значение, если клавиша нажата и возвращает 0, если не нажата.
Ниже приведен листинг, реализующий таймер с отрицательным отсчетом и при этом ожидающий нажатия любой кнопочки.
Обновление показателя счетчика таймера происходит путем возврата каретки и перезаписи предыдущего значения. По-сути - simple animation :)
Основа таймера зиждиться на функции Sleep(int miliseconds) библиотеки <windows.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int main() {
// Счетчик для таймера
int count = 10;
// Для проверки нажатия клавиши клавиатуры
int result;
// Флаг вывода сообщения о типе остановки таймера
bool showIt = true;
printf("Press any key to stop timer\n");
// Для обновления вывода таймера воспользуемся возвратом каретки \r
printf("10\r");
while(count >= 0) {
// Проверка нажатия клавиши клавиатуры. При нажатии возвращает ненулевое значение, иначе - return 0
if(result = kbhit()) {
printf("Таймер остановлен вручную\n");
showIt = false;
break;
}
count--;
// Ожидание в 1 секунду
Sleep(1000);
printf("%d \r", count);
}
if(showIt) {
printf("Таймер остановлен автоматически\n");
}
}
#include <stdio.h>
#include <windows.h>
int main() {
// Счетчик для таймера
int count = 10;
// Для проверки нажатия клавиши клавиатуры
int result;
// Флаг вывода сообщения о типе остановки таймера
bool showIt = true;
printf("Press any key to stop timer\n");
// Для обновления вывода таймера воспользуемся возвратом каретки \r
printf("10\r");
while(count >= 0) {
// Проверка нажатия клавиши клавиатуры. При нажатии возвращает ненулевое значение, иначе - return 0
if(result = kbhit()) {
printf("Таймер остановлен вручную\n");
showIt = false;
break;
}
count--;
// Ожидание в 1 секунду
Sleep(1000);
printf("%d \r", count);
}
if(showIt) {
printf("Таймер остановлен автоматически\n");
}
}