2011-12-04 39 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'部分,而我没有写出正确调用函数的整数 。感谢您的帮助!