2011-09-22 5 views
4

이중 연결 목록 클래스가 있습니다. 여기서 사용자가 입력 할 때 목록에 문자를 추가하거나 사용자가 백 스페이스를 누를 때마다 목록의 마지막 노드를 제거하고 결과를 콘솔에 실시간으로 표시하는 반면, 시각.콘솔에 실시간 키보드 입력 (Windows)?

개별 키보드 입력을 가로 채고 콘솔에 실시간으로 표시하려면 어떤 기능을 사용해야합니까? 그래서 다음과 같은 결과 :

Typ_을

사용자가 입력 중지 :

사용자가 입력을 시작 screen_에

타이핑이

사용자가 백 스페이스 5를 누르면 번 :

S_

특정 OS에 타이핑 는

창 (구체적으로 조망)이다.

windows.h의 GetAsyncKeyState는 키보드 입력 용으로 표시되지만 콘솔의 실시간 표시 문제는 여전히 남아 있습니다.

+2

아마 좋은 수준에 IO가 운영 체제 사이에 차이가 더욱 강화 옵션이있을 수 있기 때문에 당신은뿐만 아니라 OS를 지정할 수 있다면. –

+0

@Anders : 요청한대로 지정됩니다. – SSight3

+1

나는 이것이 사소한 일이라고 생각하지 않는다. 난 당신이 효과적으로 (어떻게 든) 콘솔 입력을 제거하고 keydown/up 이벤트에 대한 Windows 메시지 펌프를 듣고, 스스로 처리하고 콘솔 출력을 렌더링해야한다고 생각합니다. –

답변

2

당신은 놀라게 될 것입니다,하지만이 코드는 당신이 원하는 것을 할 것입니다 :

/* getchar example : typewriter */ 
#include <stdio.h> 

int main() 
{ 
    char c; 
    puts ("Enter text. Include a dot ('.') in a sentence to exit:"); 
    do { 
    c=getchar(); 
    putchar (c); 
    } while (c != '.'); 
    return 0; 
} 
+0

실제로 그렇습니다. 고맙습니다. – SSight3

3

C++에는 "키보드"개념이 없습니다. "stdin"이라는 불투명 한 FILE 만 읽을 수 있습니다. 그러나 해당 "파일"의 내용은 환경, 특히 터미널에 의해 채워집니다.

대부분의 터미널은 첨부 된 프로세스로 보내기 전에 입력 행을 버퍼링하므로 백 스페이스가 있는지 결코 알 수 없습니다. 당신이 정말로 필요로하는 것은 터미널을 직접 통제하는 것입니다.

이것은 매우 플랫폼에 의존적 인 절차이므로 특정 조언이 필요하면 플랫폼을 지정해야합니다. Linux의 경우 ncurses 또는 termios을 시도하십시오.

+0

요청시 지정됩니다. – SSight3

+2

건배. 행운을 빌어 요 - Windows 콘솔에 액세스하는 방법을 모르겠습니다. 답변을 기대하겠습니다! –

+1

오, 당신은 [pdcurses] (http://pdcurses.sourceforge.net/)를 시도 할 수 있습니다. 나는 그것이 윈도우에서 가능하다고 믿고, ncurses와 매우 비슷해야한다. (그래서 당신의 프로그램은 꽤 이식성이 있어야한다.) –

2

ReadConsoleInput을 사용하여 목록에 들어오는 캐랙 터를 추가하고 백 스페이스 키 (INPUT_RECORD-> KEY_EVENT_RECORD.wVirtualScanCode == VK_BACKSPACE)를 찾고 목록에서 마지막 문자를 모두 제거하십시오.

+0

어쨌든 콘솔 디스플레이에서 문자를 '제거'하시겠습니까?이것은 논리적으로 가능해야합니다. 왜냐하면 이것은 std :: cin에 대한 입력을 입력하고 무언가를 입력 한 후에 백 스페이스를 누르면 발생합니다. – SSight3

+0

ungetc()을 보셨습니까? http://www.cplusplus.com/reference/clibrary/cstdio/ungetc/ –

+0

당신이 찾고있는 것이 아닐지도 모릅니다. –