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 |
입력 버퍼의 라인 피드를 없앨 수 있다!
'C언어 > C언어 자료실' 카테고리의 다른 글
함수 호출 스택 프레임에서 메모리 보호를 위한 카나리(Canary) (0) | 2024.05.14 |
---|---|
C언어 포인터로 문자열 제어하기 (0) | 2019.04.09 |
[알고리즘] C언어 간단한 알고리즘 문제 (2) | 2018.06.07 |
[자료구조 과제] 큐 대기줄 시뮬레이션 (0) | 2018.05.30 |
내림차순 정렬, 최댓값 찾기 (0) | 2018.04.27 |
댓글