2011-12-01 76 views
0

后,这里是我的代码:如何回到正常模式关闭的诅咒窗口

#include <ncurses.h> 
#include <string.h> 
int main() { 
    char str[120]; 
    char c; 
    while (1) { 
     printf("%s", ">"); 
     scanf("%s", str); 
     if (!strcmp(str, "open")) { 
      initscr(); 
      c=getch(); 
      endwin(); 
      printf("from curses window %c\n",c); 
     } 
     printf("%s\n", str); 
    } 
    return 0; 
} 

我有一个while(1)循环,始终打印不管它从屏幕获取。

如果输入“open”,它会打开一个curses窗口,并得到一个char。之后,它将退出诅咒窗口(endwin()),并应该仍在while(1)循环中。

但我的问题是,在拨打endwin()后,它不会回到正常的printf()/scanf()循环。

+0

这可能有所帮助:http://stackoverflow.com/questions/4772061/curses-library-c-getch-without-clearing-screen – Kev

回答

0
#include <stdio.h> 
#include <curses.h> 
#include <term.h> 
#include <string.h> 
#include <stdlib.h> 

int main() { 
    char str[120]; 
    char c; 
    FILE *file_id; 
    while (1) { 
     printf("%s", ">"); 
     scanf("%s", str); 
     if (!strcmp(str, "open")) { 
      file_id = fopen("/dev/tty", "r+"); 
      SCREEN *termref = newterm(NULL, file_id, file_id); 
      //cbreak(); 
      echo(); 
      keypad(stdscr, TRUE); 
      getstr(str); 
      delscreen(termref); 
      printf("from curses window %s\n", str); 
     } 
     printf("%s\n", str); 
    } 
    return 0; 
} 

现在的源代码升级到这一点,还有两个问题

1,打开后,一旦关闭项,就可以恢复到正常循环,但是当我按下回车,PROMT不会在左边对齐,这将是这个样子,

[email protected]> 
      [email protected]> 
         [email protected]> 

2,我可以键入“打开”了,再次打开了一个新名词,但新学期仍然在同一当前位置为当我第一次输入“开放”时创建的术语,实际上,每次我都会使用 输入开放,一个术语将在同一个地方创建,这意味着首先打开的命令将消失。