2011-12-04 37 views
6

我一直在試圖做一個ncurses程序,它將在某個時間點結束ncurses模式,並在正常終端模式下恢復,但仍然保持程序運行。 這可能嗎? endwin();結束程序。 這裏是我的代碼(不用擔心的功能,我之前讓他們):如何結束ncurses而不結束C++程序?

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

我以前從未使用過的ncurses,但你嘗試過在命令行中調用可執行文件? – Bojangles

+0

是的,我試過這樣做(這就是我一直這樣做)。 – MiJyn

+0

我還沒有做足夠的詛咒來知道這是多麼容易,但一個可能的替代途徑將留在* ncurses *,但簡單地覆蓋整個終端與一個窗口,只是行線,終端樣相互作用。 – dmckee

回答

4

endwin()不終止程序;其他事情必須這樣做。

該程序正常工作在我的系統(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"; 
} 

它清除屏幕,打印 「你好,世界」 在預期的位置,睡4秒鐘,然後恢復屏幕並打印「完成」。

正如在評論中提到的,如果boxmessage()使用ncurses,那麼在您致電endwin()後它不起作用。

嘗試endwin()創建並寫入一個文件,之後加入一些代碼只是爲了驗證你的程序不正確的死在那裏。

更新(近16個月後),引用了OP的最新評論:

OK,我發現的bug。這是因爲我做了一系列按鈕,然後我做了'case:x'部分,而我沒有寫出正確調用函數的整數 。感謝您的幫助!