2012-07-08 4 views
5

getch()를 사용하여 한 번에 하나씩 문자를 읽고 버퍼로 복사하는 간단한 ncurses 프로그램을 설정했습니다. 내가 겪고있는 문제는 백 스페이스 키를 누르는 것입니다. 여기에 관련 코드 :ncurses와 함께 백 스페이스 사용

this is a test^?^?^? 

:

while((buffer[i] = c = getch()) != EOF) { 
    ++i; 
    if (c == '\n') { 
     break; 
    } 
    else if (c == KEY_BACKSPACE || c == KEY_DC || c == 127) { 
     i--; 
     delch(); 
     buffer[i] = 0; 
    } 
    refresh(); 
} 

는하지만이 코드를 실행하려고 할 때,이 라인에서 문자를 삭제하려고 후 화면에 표시되는 내용은 "이것은 테스트입니다" 및 buffer의 내용은 다음과 같습니다 GDB와

this is a test 

내가 아는 그 삭제/백 스페이스를 확인하는 문이 호출되는 경우, 그래서 그 밖의 무엇을 나는 차를 삭제할 수 있도록 일을해야 라이터?

+0

''이것은''buffer'의 내용입니까? 아니면 화면에 나타나는 것입니까? 어느 쪽이든, 다른 무엇입니까? –

+0

'이것은 시험입니다 ^? ^? ^? '는 터미널에 나타나는 것입니다, 버퍼에는'이 시험입니다'가 있습니다. – Jumhyn

답변

4

^?은 DEL 문자를 입력 할 때 화면에 표시되는 내용입니다.

아마도 delch()을 두 번 호출 할 수 있지만 두 문자 (또는 그 이상)의 시퀀스로 반향하는 문자를 파악해야합니다.

아마도 가장 좋은 방법은 noecho()으로 전화를 걸어 직접 문자를 직접 인쇄하는 것입니다.

+0

완벽하게 작동했기 때문에 사실 내 코드를 조금 더 깨끗하게 만들었습니다. 또한 백 스페이스를 확인하기 전에 'i'를 2 씩 감소시켜야했습니다. 감사! :) – Jumhyn

관련 문제