#include <unistd.h>; #include <signal.h>; #include <stdlib.h>; #include <setjmp.h>; #include <sys/signal.h>; static jmp_buf jmpbuf; void int_proc(int sig) { siglongjmp(jmpbuf, 1); } int main() { int c, i; int m; m=sigsetjmp(jmpbuf,1); if (m==1) printf("\nInterrupt\n"; else if(m==2) printf("\ninvalid input\n"; signal(SIGINT, int_proc); printf("Choose task a or b:"; c = getchar(); while(getchar()!='\n') continue; printf("you select\n"; switch (c) { case 'a': for (i = 0; i < 10; i++) { printf("..%3d%%", (i+1)*10); sleep(2); } break; case 'b': for (i = 0; i < 10; i++) { printf("..%3d%%", (i+1)*10); sleep(1); } break; default: siglongjmp(jmpbuf, 2); } printf("End task\n"; }