입력버퍼

입력버퍼 ?
#include <stdio.h>

int main()
{
int a;
char c;

scanf("%d", &a);
scanf("%c", &c);

printf("정수는 %d\n", a);
printf("문자는 %c\n", c);

}
위의 코드를 실행하여 데이터를 넣으려고하면 첫번째 scanf에서 정수를 입력하면 두번째 scanf를 거치지않고 바로 출력이 된다.
그 이유는 첫번째 scanf에서 정수를 받고 엔터를 누르면 버퍼에 \n(엔터)에 대한 버퍼는 남아있게 된다. 그 후에 두번째 scanf가 실행되면서 버퍼에 있는 \n(엔터)를 받아오고 그냥 넘어가게 된다.

-> \n(엔터) 가 c에 저장됨.

해결방법

1.scanf("%d", &a);
getchar();
scanf("%c", &c);
이렇게쓰면 enter가 getchar로 들어가

  1. %c앞에 공백 붙임
    scanf("%d", &a);
    scanf(" %c", &c);

3.%c를 추가하여 데이터 버림.
scanf("%
c%c", &c)를 사용하면 첫번째 %*c에서 버퍼를 받지만 버리고, 다음 %c를 통해 데이터를 받음.

참고로 정수형 데이터를 받을때는 \n이 버퍼에 있으면 무시한다. (당연히 정수가 아니니까;;;)

scanf함수는 ' '(띄어쓰기), '\n(엔터)', '/t(탭키)', '\0(NULL)'를 만날때까지 데이터를 받아옵니다.

%s는 버퍼에서 값을 받으면서 유효한 데이터가 나올때부터 저장을 시작하며 문자를 계속 읽어오다가 \n이 나오면 \0(null)을 저장하면서 끝냄.

ㄴ> 꿀팁!

  1. scanf("%[^\n]s",str);
    ㄴ> '\n'문자를 만나기 전까지 공백을 포함한 문자열 입력받음.

좋은 웹페이지 즐겨찾기