2014-02-20 2 views
1
char ch; 
ch=getch(); 
printf("%d",ch); 

I를 입력 enter key 다음 표시되는 출력이에 대한 inputing 키 입력

13 

입니다 그러나 새로운 라인에 대한 아스키 코드는 10입니다, 왜 13이 표시됩니다? 캐리지 리턴 줄 바꿈 다음 :

다음 코드는 정말 두 문자는 "입력", 일부 시스템에서 enter key

char *ch=malloc(100); 
do 
{ 
    *ch=getch(); 
    ch++; 
}while(*(ch-1)!='\n'); 
+0

'getch'는 비표준이며 이식성이 없습니다. 대신에'getchar'을 사용하십시오. – ajay

답변

2

입력에 무한한 시간을 실행합니다.

+0

이 경우 다음에' '\ n'''의 조건을 확인하는 방법 – zee

+0

@zee 업데이트를 읽고 Paul이 언급 한대로 getch는 표준이 아닙니다. 만약 당신이 정말로 그것을 사용해야한다면, 당신은 이미 "Enter"에 "\ r"을 반환한다는 것을 이미 알고 있으므로, 대신에 그것을 체크하십시오. 그렇지 않으면 getchar()을 항상 사용할 수 있습니다. – Allbeert

1

최종의 라인에 관계없이 항상 기본 시스템이 다른 \n, \r 또는 \r\n, 또는 무언가로 그것을 나타내는 여부, C에 '\n'으로 표시됩니다. 시스템의 '\n' 값은 13 일 것입니다.

C에는 ASCII가 필요하지 않지만 ASCII에는 캐리지 리턴 문자와 줄 바꿈 문자가 있습니다. C에 ASCII가 필요하지 않으므로 숫자 값을 사용하지 마십시오. 항상 이식성을 위해 문자 리터럴 '\n'을 사용하십시오.

getch()은 표준 C 함수가 아니므로 C 표준 I/O, 라이브러리를 사용할 때 줄의 끝을 테스트하는 것이지 특정 목적이 아닌지 테스트하는 것입니다. 과 같은 키을 입력하고 '\n'을 테스트하면됩니다. 분명히 파일에서 이러한 함수를 사용하는 경우 키에 대해 이야기하는 것이 바람직하지 않습니다.

+0

내 업데이트 된 질문을 확인하고 당신이'getch()'로 무엇을 하려는지 알게 될 것입니다. – zee

+0

제 말은'getch()'가 무엇인지 또는 어떻게 작동하는지 알지 못합니다. 표준 C 함수가 아니기 때문입니다 , 당신은 그것에 대해 상세히 말하지 않습니다. 아마도 그 기능은 문자를 전혀 읽지 않기 때문에 내가 아는 한 당신을 위해 작동하지 않을 것입니다. –

+0

다음은 무엇입니까? – zee

1

Windows OS를 사용하고 있다고 가정합니다. 을 입력하면 키가 입력되고 carriage return 또는 CR이라고도하는 '\r' 문자는 getch 함수로 읽습니다. key-codes을 참조하십시오. 분명히 이것을 false으로 평가하는 줄 바꿈 문자 '\n'과 비교하고 루핑을 계속합니다. 그래서 대신이 작업을 수행해야합니다 '\r'

char *ch = malloc(100); 

// check ch for NULL 
do { 
    *ch = getch(); 
    ch++; 
} while(*(ch-1) != '\r'); // compare with carriage return 

ASCII 값은 13이며, 그것은 당신의 출력을 설명합니다. getch 기능이 표준이 아니며 휴대용이 아닙니다. 또한, 더 이상 사용되지 않습니다. 대신 표준 getchar 함수를 사용해야합니다. 또한 이것을 읽으십시오 - Why doesn't pressing enter return '\n' to getch()?