C언어/C언어 자료실
C언어 입력 버퍼 초기화 방법들
Chipmunks
2018. 9. 4. 23:41
728x90
입력 버퍼 문제는 문자 형식을 받을 때 일어난다.
입력 버퍼에 남아있는 문자 때문에, 원하는 동작이 일어나지 않는다.
대개 엔터키의 잔여물인, 라인 피드(LF, 아스키코드 10)다.
많은 초보자들이 흔히 실수하는 것 중 하나다.
C언어를 입문한 사람들에게는 도대체 알아챌 수 없는 오류다.
다음과 같이 입력 버퍼를 없앨 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdio.h> int main(void) { char a; while (1) { scanf("%c", &a); printf("%c %d\n", a, a); if (a == 'q') { break; } } return 0; } | cs |
실행결과는 다음과 같다.
1 2 3 4 5 6 7 | ~/Desktop > ./main2 a a 97 10 q q 113 | cs |
a를 입력하고 엔터키를 눌렀을 뿐이다. a 키는 무사히 받았지만, 그 뒤에 바로 아스키 코드 10인 LF 가 저절로 입력됐다.
입력버퍼는 stdin 파일 스트림으로 지칭된다. fseek() 함수로 stdin 파일 스트림의 위치를 끝으로 옮기면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> int main(void) { char a; while (1) { fseek(stdin, 0, SEEK_END); scanf("%c", &a); printf("%c %d\n", a, a); if (a == 'q') { break; } } return 0; } | cs |
실행결과는 다음과 같다.
1 2 3 4 | ~/Desktop > ./main2 a a 97 q | cs |
입력 버퍼의 라인 피드를 없앨 수 있다!