2017-12-02 5 views
0

ncurses에 텍스트 편집기를 쓰고 있습니다. 프로그램이 원시 모드로 초기화됩니다. 인쇄 할 수없는 문자를 피하기 위해ncurses에서 터미널에 이미 인쇄 된 문자 삭제하기

void console(ch) 
{ 
    if(ch == 8) //8 = backspace according to asciitables.com 
    { 
     printw("\b"); 
     printw(" "); 
    } 
    else 
    { 
     addch(ch); 
    } 
} 

: 그래서

삭제 등 비 인쇄 문자를 인쇄 방지, 수동으로 삭제처럼 많은 일을 할 필요가

void console(ch) 
    { 
     bool safe = TRUE; 
     int avoid[] = { 1,2,3,4,5,6,7,8}; 
     for(int i=0;i<4;i++) 
    { 
     while(ch==avoid[i]) 
     { 
      safe = false; 
     } 
    } 
    if(safe) 
    { 
     printw("%c",ch); //Prints the key's characters on the screen. 
    } 
    else 
    { 
     break; 
    } 
} 

삭제시 터미널에서 이전에 인쇄 된 문자를 삭제하고 공백을 삽입하고 커서를 이전 문자의 위치로 되돌리려 고했습니다. 하지만 그건 효과가 없습니다.

인쇄 할 수없는 문자를 피하려면 인쇄 할 수없는 문자는 사용하지 말고 인쇄 가능한 문자 만 인쇄하십시오. 그러나 그것은 또한 작동하지 않는 것 같습니다.

누군가 내가 나를 잘못 지적하고 나를 교정하면 매우 도움이 될 것입니다. 누구든지 ncurses 라이브러리에 특정 함수가 있는지 여부를 알 수 있다면 도움이 될 것입니다. 나는 거의 새로운 ncurses입니다.

+0

"stdout"이 아닌 터미널에 인쇄하고 있습니다. 특히 curses 기반 프로그램을 작성하는 경우에는 stdout을 터미널과 결합하지 마십시오. –

+0

좋습니다. 그것을 바꿨다. 하지만 내가 어디 잘못 됐는지 말해? –

+0

정확히 어떻게 작동하지 않습니까? 'printw ("\ b")'가 전혀 작동하지 않으면'printw ("\ b \ b");를 사용하여 공백으로 덮어 쓰고 커서를 하나씩 백업 해 두십시오. –

답변

0

"인쇄 할 수없는"문자를 감지하는 가장 쉬운 방법은 unctrl에서 결과를 검사하는 것입니다. 문자가 인쇄 가능한 경우 결과는 단일 문자입니다.

char *check = unctrl(ch); 
int safe = (check != 0 && strlen(check) == 1); 

합니다 (manual page 일부 내용이수록) : 그렇지 않으면 두 개 이상의 문자입니다. 그런데

, addch는 (그것의 매개 변수가없는, int에 들어가있는 char chtype이라고하지만 명심) 인쇄 문자 printw보다 더 적합하다. 다시, 매뉴얼 페이지는 프로그램을 준비하는 데 유용 할 것입니다.

+0

고마워요. 그것은 정말로 나를 도왔다. 감사. –

관련 문제