한걸음, 한걸음씩
[C언어]scanf()함수 더 이해하기 본문
scanf() 함수로 2개 이상 입력을 받을 시,
enter 나 tab, 띄어쓰기 등 입력 값 사이에 공백이 있으면
그 공백으로 입력 값들을 구분한다.
앞서 포스팅한 내용에서 사용자 입력을 받을 시, gets()함수는 개행문자를 버리지만 scanf()함수는 개행문자를 버리지 않는다
#include <stdio.h>
int main()
{
char a;
char b;
printf("two input : ");
scanf("%c", &a);
scanf("%c", &b);
printf("a : %c, b : %c", a, b);
return 0;
}
위와 같은 코드를 컴파일 시,
사용자가 a와 b를 입력했다고 가정하자.
그렇다면 출력 결과는
a : a, b : b가 되어야 할 것이다.
그러나 출력결과는 아래와 같다.
분명히 scanf()함수를 2번 썼는데 한번만 입력 받고 바로 출력이 된다.
그렇다고 해서 변수 b에 값이 안 들어간 것은 아니다.
위에서 말했듯이 scanf()는 개행문자를 버리지 않는다.
즉, 변수 b에는 개행 값이 들어가있는 것이다.
a 입력한 뒤, enter 말고 스페이스바로 입력 값을 구분해서 입력한다고 하더라도
아래와 같이 여전히 변수 b에 b값이 들어가지 않는다.
역시, b에는 공백 값이 들어가 있다.
또 다른 소스코드를 본다면
위의 소스코드에서 a의 자료형만 바꿨다.
#include <stdio.h>
int main()
{
int a;
char b;
printf("two input : ");
scanf("%d", &a);
scanf("%c", &b);
printf("a : %d, b : %c", a, b);
return 0;
}
k와 9을 입력했다고 가정한다면
결과가 어떻게 되겠는가?
결과는 아래와 같다.
k가 변수 a에 저장되어야하는데 변수 b에 저장되어있다.
scanf()함수는 사용자가 값을 입력 시 바로 변수에 저장되지 않고 입력버퍼 stdin에 먼저 저장 된다.
컴파일 시 그림과 같이 동작한다.
변수 a를 선언만 했지 초기화하지 않았기 때문에 a는 쓰레기 값이 출력되고 b는 k가 출력되는 것이다.
위와 같은 scanf()의 기능을 잘 이해하고 코드를 쓰도록 하자.
'IT > C' 카테고리의 다른 글
[C언어]연산자 (0) | 2017.07.09 |
---|---|
[C언어]표준 입력 함수 : gets(), scanf() (0) | 2017.07.09 |
[C언어]표준 출력 함수 : puts(), printf() (0) | 2017.07.08 |
[C언어]특징 및 변수 (0) | 2017.07.02 |