C언어/C언어 자료실

C언어 입력 버퍼 초기화 방법들

Chipmunks 2018. 9. 4.
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


입력 버퍼의 라인 피드를 없앨 수 있다!

댓글