문자

2012-02-08 3 views
2

내가 두 자리 코드 주소 입력 배열 위치 만들려고 노력하고 있어요 C.문자

를 사용하여 리눅스 터미널 프로그램을 만드는 오전의 특정 숫자 후 보냅니다. 두 자릿수의 입력이 끝날 때마다 Enter 키를 누르지 않으려 고합니다. 문자가 입력 된 직후에 scanf를 통해 입력 된 값을 버퍼 변수로 보내주기를 원합니다.

코드 예제가 없습니다.이 방법에 대해 잘 모릅니다.

도움 주셔서 감사합니다.

답변

1

거의 동일한 방법으로 동일한 문제를 해결하는 두 가지 옵션이 있습니다. 첫 번째는 프로그램을 실행할 때 stdbuf을 사용하는 것입니다. 호출은 다음과 같습니다 그 사용

stdbuf -i0 ./a.out 

라인 버퍼링되는 것을 stdin을 방지하고, 당신이 그런 일이 같은 입력을 검색 할 fread() 또는 이와 유사한 명령을 사용하게됩니다.

다른 하나는 모드에 터미널을 넣는 것입니다. 그것은 잘 설명 된 here입니다. 그러나 제어 문자가 더 이상 다루어지지 않는다는 단점이 있습니다. 귀하의 프로그램에서

#include <termios.h> 

main(){ 
    struct termios trm; 

    tcgetattr(STDIN_FILENO, &trm); /* get the current settings */ 
    trm.c_cc[VMIN] = 1;  /* return after 1 byte read; you might make this a 2*/ 
    trm.c_cc[VTIME] = 0; /* block forever until 1 byte is read */ 
    tcsetattr(STDIN_FILENO, TCSANOW, &trm); 
} 
+0

감사합니다. curses.h에서 cbreak를 사용하여 원시 모드 사용을 중단했습니다. – Aaron