PROBLEMA Catturare segnali

Pubblicità

Snalez

Nuovo Utente
Messaggi
3
Reazioni
0
Punteggio
21
Salve a tutti, quello che non funziona in questo giochino è che non termina una volta catturato il segnale ma esegue solo la printf all'interno dell'handler. Dove sbaglio?

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void gestore(int segnale);
int main(int argc, char * argv[]){
   int random, answer;
   srand(getpid());
   random = rand () % atoi(argv[1])+1;
   printf("Write a number: ");
   alarm(3);
   if(signal(SIGALRM, gestore))
       return 0;
   scanf("%d", &answer);
   while(answer != random){
       if(answer > random)
           printf("higher\n");
       else if(answer < random)
           printf("lower\n");
       printf("Write a number: ");
       scanf("%d", &answer);
   }
   printf("guessed\n");
}
void gestore(int segnale){
   signal(segnale, SIG_IGN);
   printf("off time!");
   signal(segnale, gestore);
}
 
Immagino che dopo avere ricevuto il segnale il codice continui nel loop del main. Se vuoi che si fermi devi terminare l'esecuzione eplicitamente.
 
Suggerimento: leggi il valore due volte nel codice, e la prima volta senza notificare l'utente di cosa debba fare, puoi riscriverlo cosi':

Codice:
   answer = random+1; // inizializza con un numer diverso
   while(answer != random){
       printf("Write a number: ");
           scanf("%d", &answer);
       if(answer > random)
           printf("higher\n");
       else if(answer < random)
           printf("lower\n");
   }
 
Pubblicità
Pubblicità
Indietro
Top