Ожидание ввода в течение некоторого интервала времени - C (СИ)
Формулировка задачи:
int main()
{
char ch;
ch='$';
/* в этом месте нужно написать фрагмент кода
а именно, надо чтобы программа ожидала ввода символа(например, scanf)
в течении установленного времени (нескольких секунд)
после чего продолжается выполнение программы независимо от того был ли он введен или нет
*/
printf("%c \n",ch);
return 0;
}Решение задачи: «Ожидание ввода в течение некоторого интервала времени»
textual
Листинг программы
int i;
int was_hit = 0;
clock_t c = clock();
clock_t new_c = 0;
while (1) {
new_c = clock();
if ((new_c - c)/(double)CLOCKS_PER_SEC >= 3.0) {
break;
}
if (kbhit()) {
scanf("%d", &i);
was_hit = 1;
break;
}
}
if (was_hit)
printf("I = %d", i);
else
puts("Opozdal ept");
Объяснение кода листинга программы
- Объявлены две переменные:
iиwas_hitтипаint - Вычислено значение переменной
cс помощью функцииclock() - Запущен бесконечный цикл while (1)
- Внутри цикла происходит обновление значения переменной
new_cс помощью функцииclock() - Проверяется условие ((new_c - c)/(double)CLOCKS_PER_SEC >= 3.0)
- Если условие выполняется, то происходит выход из цикла с помощью оператора break
- Проверяется условие kbhit()
- Если условие выполняется, то происходит ввод значения переменной
iс помощью функции scanf() - Переменная
was_hitпринимает значение 1 - Выполняется оператор break для выхода из цикла
- После завершения цикла проверяется значение переменной
was_hit - Если
was_hitравно 1, то выводится значение переменнойiс помощью функции printf() - Если
was_hitравно 0, то выводится сообщениеOpozdal eptс помощью функции puts()