io non programmo in c, eppure in 5 minuti si capisce come funzionano longjmp e setjmp, ed è ben specificato ovunque che setjmp ha 2 ritorni (esempio, http://docs.sun.com/app/docs/doc/816...gjmp-3c?a=view ):
quindi un modo semplice per evitarti questo problema, è distinguere il caso del primo ritorno di setjmp (che è per forza = 0) con il caso di un altro ritorno di setjmp (che non può essere = 0); non è solo un modo per evitare un problema ma è anche il corretto modo di operare, così effettivamente ti fai qualcosa dei codici di eccezione che sollevi con il secondo argomento di longjmp .At the time of the second return from setjmp(), all external and static variables have values as of the time longjmp() is called (see EXAMPLES).
ad esempio:
codice:#include<stdio.h> #include<sys/stat.h> #include<sys/types.h> #include<stdlib.h> #include<string.h> #include<setjmp.h> int main() { char r,i; int res = 0; jmp_buf buf; printf("\nCreare una nuova cartella? [s/n]: "); res = setjmp(buf); if(res!=0) //siamo nella seconda chiamata. facciamo un flush del carattere precedente. getchar(); r = getchar(); switch(r) { case 's': printf("Creazione della cartella\n"); break; case 'n': printf("Ok, fine del programma\n"); break; default: printf("\nInput errato, ripetere.. [s/n] :"); longjmp(buf, 2); } exit(0); return 0; }

Rispondi quotando