Я попытаюсь взглянуть не на дословный вопрос, который вы задаете, а на ваше намерение - очевидно, вы хотите представить результат вычислений, вызванный какой-то реакцией пользователя.
Проверка «нажата ли клавиша?» на каждой итерации достаточно расточительно - ваш процессор может тратить все это время на выполнение более полезных задач.
Итак, лучший подход здесь - это использование сигналов, на мой взгляд, а именно, SIGINT, который срабатывает, когда вы нажимаете «Ctrl-C». Вот код, который напечатает значение переменной, когда вы нажмете Ctrl-C, и выйдет после того, как вы сделаете это три раза:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
long globalvar = 0;
int interrupts_before_exit = 3;
void ctrl_c_handler(int x) {
printf("Value of the variable: %ld\n", globalvar);
if(--interrupts_before_exit) {
printf("Press Ctrl-C %d more times to stop\n", interrupts_before_exit);
} else {
printf("Computation interrupted!\n");
exit(0);
}
}
int main(int argc, char *argv[]) {
struct sigaction act;
act.sa_handler = ctrl_c_handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if(sigaction(SIGINT, &act, NULL) >= 0) {
while (1) {
/* The work happens here */
globalvar++;
}
}
exit(1);
}
Вы можете передавать сигналы между программами, так что на самом деле вы можете форкнуть программу, которая выполняет «работу», и тогда вторая программа будет лениво контролировать клавиатуру - и, как только будет нажата клавиша, она отправит сигнал на первый, который будет печатать результат.