Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

한걸음, 한걸음씩

[C언어]scanf()함수 더 이해하기 본문

IT/C

[C언어]scanf()함수 더 이해하기

midday_night 2017. 7. 9. 17:50

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
Comments