Я хочу иметь возможность очистить значение того, что считал scanf. Другими словами, я хочу удалить значение, прочитанное scanf.
Вот мой пример кода:
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
volatile sig_atomic_t gotsignal;
void handler(){
gotsignal = 1;
}
int main(){
struct sigaction sig;
sig.sa_handler = handler;
sig.sa_flags = 0;
sigemptyset(&sig.sa_mask);
alarm(5);
sigaction(SIGALRM, &sig, NULL);
int value;
while(!gotsignal){
printf("Insert a value: \n");
scanf("%d", &value);
}
}
Выход:
Insert a value:
5(dont press enter)[JPS@localhost c]$ 5 <-
Можно ли (если да, как) очистить 5?
Я читал о настройках терминала, fflushs, stdin, но я не мог понять это. Любая помощь, пожалуйста?
РЕДАКТИРОВАТЬ: После многих попыток я думаю, что я нашел что-то, что работает. Если у кого-то есть эта проблема, это работает для меня (не уверен, работает ли она на других системах и прочее, вроде как новичок в этом):
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
#include <termios.h>
#include <unistd.h>
volatile sig_atomic_t gotsignal;
void handler()
{
gotsignal = 1;
}
int main(){
struct sigaction sig;
sig.sa_handler = handler;
sig.sa_flags = 0;
sigemptyset(&sig.sa_mask);
alarm(5);
sigaction(SIGALRM, &sig, NULL);
int value;
while(!gotsignal){
printf("Insert a value: \n");
scanf("%d", &value);
}
printf("\n");
tcflush(STDOUT_FILENO,TCIOFLUSH); <-important bit!
return 0;
}
Выход:
Insert a value:
5
Insert a value:
5(no enter was pressed)!
[JPS@localhost c]$ <- NO MORE NR 5! :D