2011-12-04 18 views
6

Ho cercato di creare un programma ncurses che terminerà la modalità ncurses a un certo punto e di riprendere in modalità terminale normale, mantenendo comunque il programma in esecuzione. È possibile? endwin(); termina il programma. Ecco il mio codice (non preoccuparti per le funzioni, li ho fatti prima):Come posso terminare ncurses senza terminare il programma C++?

clear(); 
refresh(); 
endwin(); 
boxmessage("STEP 1"); 
consolewrite("Removing Popularity Contest..."); 
std::vector<std::string> removepak; 
removepak.push_back("popularity-contest"); 
removepackages(removepak); 
+0

Non ho mai usato NCurses prima, ma hai provato a richiamare l'eseguibile dalla riga di comando? – Bojangles

+0

Sì, ho provato a farlo (è così che l'ho sempre fatto). – MiJyn

+0

Non ho fatto abbastanza maledizioni per sapere quanto sia facile, ma una possibile via alternativa sarebbe rimanere * in * ncurses, ma semplice coprire l'intero terminale con una finestra che fa solo linea, terminale come interazione. – dmckee

risposta

4

endwin() non è la chiusura del tuo programma; qualcos'altro deve esserlo.

Questo programma funziona correttamente sul mio sistema (Ubuntu 11.04, g ++ 4.5.2):

#include <curses.h> 
#include <unistd.h> 
#include <iostream> 
int main() { 
    initscr(); 
    mvaddstr(10, 10, "Hello, world"); 
    refresh(); 
    sleep(4); 
    endwin(); 
    std::cout << "DONE\n"; 
} 

Si pulisce lo schermo, stampe "Hello, World" nella posizione prevista, posti letto per 4 secondi, quindi ripristina lo schermo e stampa "FATTO".

Come è stato menzionato nei commenti, se boxmessage() utilizza ncurses, non funzionerà dopo aver chiamato endwin().

Prova ad aggiungere del codice dopo endwin() che crea e scrive su un file, solo per verificare che il tuo programma non muoia proprio lì.

Aggiornamento (quasi 16 mesi dopo), citando più recente commento del PO:

OK, ho trovato il bug. Solo perché ho creato una serie di pulsanti, , ho eseguito la parte 'caso: x' e non ho scritto il numero intero che chiama correttamente la funzione. Grazie per aver cercato di aiutare!

Problemi correlati