2017-11-26 7 views
0

XUBUNTU 16.04와 Geany를 사용하고 있습니다. 라이브러리 ncurses를 테스트하기 시작했습니다. 나는 캐릭터를 보여줄 수 없다. 프로그램을 실행하면 창이 나타나지만 "a"및 "*"문자는 나타나지 않습니다.ncurses로 문자 인쇄가 실패했습니다.

#include <ncurses.h> 
void line(char ch, int n) 
{ 
int i; 
for(i = 1; i<=n; i++) 
     addch(ch); 
} 

int main() 
{ 
    clear(); 
    line("a", 50); 
    line("*", 8); 
    return 0; 
} 
+2

경우 새로 고침입니까? 'initscr()'은 어디에 있습니까? 청소는 어디 있니? 이것은 자체 초기화가 아닙니다. –

답변

3

man curs_refresh :

내 코드입니다

refreshwrefresh 루틴 (또는 wnoutrefreshdoupdate) 터미널에 실제 출력을 얻기 위해 호출해야하며, 다른 루틴과 같은 단지 데이터 구조를 조작한다.

따라서 프로그램에 refresh();이 누락되었습니다.

초기에 initscr()을 호출하고 프로그램이 끝날 때 endwin()을 호출하는 등 초기화/정리가 누락 된 것처럼 보입니다.

2

두 가지가 누락되었습니다 :

  • 초기화
  • 뭔가를 화면에 텍스트를 유지하기 위해 (당신이 ead the manual page r에있는 경우, 또는 newterm) 잠시

초기화 initscr로 시작합니다. 작성된 것처럼 프로그램은 화면에 무엇인가를 인쇄하고 일시 중지하지 않고 종료합니다 (그리고 단말기가 대체 화면을 사용하는 경우 텍스트가 사라집니다). A getch (read a character from the keyboard)은 refresh 일뿐만 아니라 수행합니다.

initscr 코드는 단말 종류를 판정하고, 모든 커스 데이터 구조들을 초기화한다 initscr does that 때문에 그런데, clear는 불필요하다. initscr 또한 refresh (3x) 에 대한 첫 번째 호출에서 화면을 지 웁니다. 오류가 발생하면 initscr은 적절한 오류 메시지를 표준 오류에 쓰고 종료합니다. 그렇지 않으면 포인터가 stdscr으로 반환됩니다.

이 시도 :

#include <curses.h> 
void line(char ch, int n) 
{ 
int i; 
for(i = 1; i<=n; i++) 
     addch(ch); 
} 

int main() 
{ 
    initscr(); 
    cbreak(); 
    noecho(); 
    line("a", 50); 
    line("*", 8); 
    getch(); 
    endwin(); 
    return 0; 
} 
+0

감사합니다. 그것은 작동합니다. – Juan