입력버퍼
입력버퍼 ?
#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로 들어가
- %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)
을 저장하면서 끝냄.
ㄴ> 꿀팁!
- scanf("%[^\n]s",str);
ㄴ> '\n'문자를 만나기 전까지 공백을 포함한 문자열 입력받음.
Author And Source
이 문제에 관하여(입력버퍼), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kdo6301/입력버퍼저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)