2013-11-01 19 views
5

Sono ancora nuovo in C e ncurses. Mi è stato chiesto di fare un incarico che prevedeva la realizzazione di un gioco pong multithread. Il gioco funziona bene e termina con le condizioni di perdita corrette ma alla fine il mio terminale è tutto incasinato. Non ho eco, quindi devo digitare stty echo per riaverlo, anche se il terminale si comporta in modo strano.C Come tornare alla normalità dopo che il programma curses termina

La mia funzione fine è la seguente:

void wrap_up(){ 

    curs_set(1); 
    clear(); 
    endwin(); 
    refresh(); 
} 

Ecco uno screenshot. Come lo aggiusto?

enter image description here

+0

Qual è il codice delle funzioni? – LeeNeverGup

+0

Fornire un esempio di lavoro minimo (compilabile). –

risposta

5

Rimuovere aggiornamento dopo endwin. Chiamando l'aggiornamento dopo endwin il programma torna in modalità curses.

-1

Bene, dipende da come si desidera implementarlo. Per renderlo portabile è possibile implementare direttive di compilazione per cancellare lo schermo a seconda del sistema operativo su cui si sta lavorando.

Esempio:

void Refresh(){ 
#ifdef WIN_32_OS 
    system("cls"); 
#elif LINUX_OS 
    system("clear"); 
#else // (DOS, for example) 
    system("Another command"); 
#endif 
} 

Così, nel tempo di compilazione si può usare qualcosa di simile:

bash2.2 $ gcc -c -DLINUX_OS code.c -o codice

+0

che sembra la soluzione alternativa piuttosto che la soluzione. Inoltre, il comando 'clear' non funziona per questo caso, stai cercando il reset o tset. – CaseyJones

+0

@CaseyJones Ho capito, ma non ho trovato perché la mia risposta non è utile. – rfermi

+1

La tua risposta non risolve il problema, temo. Clear non ripristina il funzionamento del terminale durante la situazione descritta dall'OP. Per questo è necessario utilizzare i comandi 'reset' o 'tset'. – CaseyJones