2011-03-02 7 views
0

Windows 및 Linux에서 c로 작성된 콘솔 응용 프로그램에서 모든 키 입력을 읽으려고합니다. 불행히도 함수 (lines)는 "enter/return"키를 누를 때만 값을 반환합니다. 키를 누른 직후에 리턴하는 함수를 찾고 있습니다.콘솔 응용 프로그램에서 동기 키 스트로크 읽기

char cTmp[MAX_LINE]; 
char line[MAX_LINE]; 
while(gets(line) != NULL) { 
    sprintf(cTmp,"Characters entered: %c", line); 
    puts(cTmp); 
} 
+0

잘 모르겠지만 getc()하지 않습니까? –

답변

2

당신은 아마 getch() 찾고 :

현재 내 코드는 다음과 같이 보인다. Windows에서 (최소한 VC++) 그것은 <conio.h>에 선언되어 있습니다. 리눅스에서는 curses의 일부입니다.

+0

실제로 getc()는 stdio의 일부분입니다 –

+1

@Murali VP : 예, getc는 stdio의 일부입니다.하지만 적어도 내가 구현 한 것에 대해서는 getc가 원하는대로하지 않을 것입니다. 단일 문자 만 읽지 만 사용자가 return/enter 키를 눌러야합니다. 'getch'는 stdio의 일부는 아니지만 그가 원하는 것을 수행합니다 - 사용자가 return 키를 누를 때까지 대기하지 않고 단일 문자를 읽습니다. –

+1

@Murali VP getc()는 스트림 함수이므로 터미널이 라인 모드를 벗어나 재구성되지 않으면 원하는 동작을 수행하지 못합니다. –

0

난 당신이 getchar()putchar() 찾고있는 생각 :

#include <stdio.h> 
char line[MAX_LINE]; 
int i = 0; 
int c; 
while ((c = putchar(getchar())) != EOF) 
{ 
    line[i] =c; 
} 
2

다음 코드는 나를 위해 일했다. 나를 올바른 방향으로 향하게 해주셔서 감사합니다. http://bytes.com/topic/c/answers/503640-getch-linux

#include <termios.h> 
#include <unistd.h> 

int mygetch(void) 
{ 
struct termios oldt, 
newt; 
int ch; 
tcgetattr(STDIN_FILENO, &oldt); 
newt = oldt; 
newt.c_lflag &= ~(ICANON | ECHO); 
tcsetattr(STDIN_FILENO, TCSANOW, &newt); 
ch = getchar(); 
tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 
return ch; 

} 
관련 문제