C-language

[C언어] 남아 있는 입력 버퍼 비우는 방법

전자둥이 2022. 7. 31. 22:48
반응형

안녕하세요

전자둥이입니다.

 

C언어로 코드를 작성할 때 scanf를 사용하 실 때 주의할 점이 있습니다.

예제를 통해서 살펴보겠습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){
    char a,b;
    scanf("%c", &a);
    scanf("%c", &b);
    printf("%c\n", a);
    printf("%c\n", b);
    return 0;
}

** 결과

a를 입력하자마자 위 결과처럼 끝나는 모습을 확인 할 수 있습니다.

b변수에는 어떠한 값도 입력하지 않았는데 왜 입력을 받지않고 끝났을까요?

우선 b변수에 어떤 값이 들어가있는지 확인해보겠습니다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){
    char a,b;
    scanf("%c", &a);
    scanf("%c", &b);
    printf("%c\n", a);
    printf("%d\n", b);
    return 0;
}

b변수에는 10이라는 값이 담겨져있는 모습을 확인 할 수 있습니다. 10은 아스키코드에서 LF(new line)을 뜻합니다. 즉 입력버퍼공간에 엔터값(10)이 남아있다가 해당 값이 b변수에 담겨져 있는모습입니다.

이를 해결하기 위해서는 다양한 방법이 있지만 그 중에서 getchar()를 사용하는 방법을 알아보겠습니다.

 

** Code

int tmp;
//한 자씩 받아서 파일의 끝이거나 개행 문자를 만나면 입력을 멈추므로 항상 입력 버퍼를 지워야 합니다.
while((tmp = getchar()) != EOF && tmp != '.\n') {}

위 코드를 그 다음 scanf를 사용하기 전에 사용하면 입력버퍼가 비워지면서 위와 같은 문제가 해결될것입니다.

 

직접 사용해보시는 것을 추천드립니다.

감사합니다.

반응형

'C-language' 카테고리의 다른 글

[C언어] 배열 array  (0) 2022.07.27
mmap() malloc() 차이점  (0) 2021.01.26
c++ 클래스란 무엇일까  (0) 2021.01.24
c언어 전처리기란 무엇일까요?  (0) 2021.01.24
구조체와 파일입출력을 활용한 예제  (0) 2021.01.23