scanf 함수

scanf 함수의 데이터 입력

키보드로부터 다양한 데이터를 변수에 입력을 해야 할 경우에 scanf 함수를 사용한다. scanf 함수의 사용법은 printf 함수와 유사하다. 따라서, printf 함수와 같이 변환 문자가 필요하다. 키보드로부터 입력 받는 모든 내용은 문자로 인식된다. 그래서 , 입력 데이터를 연산 가능한 정수 또는 실수로 사용하려면 문자를 정수나 실수로 바꾸어 주는 절차가 필요하다. 이 역할을 하는 것이 ‘입력 변환 문자’이다. scanf 함수에서 사용되는 입력 변환 문자들은 아래 표와 같다. 정수 타입에서 unsigned 붙은 경우 괄호 안의 입력 변환 문자들 사용한다.

입력 데이터 타입입력 변환 문자
(unsigned) short%hd (%hu )
(unsigned) int%d (%u )
(unsigned) long%ld (%lu )
(unsigned) long long%lld (%llu )
float%f
double%lf
long double%Lf
char(문자)%c
char 배열(문자열)%s
입력 변환 문자 표

scanf 함수 사용법

scanf함수는 입력값을 변수에 저장하는 경우에 사용한다. int 타입 변수 a에 정수 1개를 입력하는 아래 예제를 통하여 사용법을 봅시다.

scanf ( ” %d” , &a) ;

정수를 입력 받는 것이므로 변환 문자는 %d를 사용하고 입력 값을 저장할 변수 a 앞에 &기호를 붙여준다. 이 & 기호는 포인터 , 함수를 공부해야 이해할 수 있으므로
지금은 대충 넘어가는 것이 좋다. 예제를 하나 더 봅시다.

1.int main(void)
2. {
3.	int a;
4.
5.	scanf("%d", &a);                //  변수 a에 값 입력
6.	printf("입력된 값 : %d\n", a);  // 입력한 값 출력
7.
8.	return 0;
9.}

위 예제를 실행하면 5행의 정수 입력을 받는 부분에서 커서가 대기를 한다. 입력이 없다면 더 진행되지 않는다. 정수를 입력하면 그 값이 a에 저장 된다. 예컨대 , 정수 7을 입력하면 6행의 printf 함수에 의해 입력된 7이 출력 된다.

scanf 함수 사용시 주의할 점이 있다. 위의 5행과 같이 변수a 앞에 &기호를 붙여야 한다. printf 함수의 경우 변수 앞에 &를 붙이지 않기 때문에 실수하기 쉽다.
단 , char 배열에 %s 변환 문자를 사용하는 문자열 입력의 경우에는 배열명 앞에 &기호를 붙이지 않는다.
그리고 , 입력 데이터 타입에 적합한 입력 변환 문자를 사용해야 한다. 예컨대 , %d 를 사용하는데 문자열을 입력해선 안된다.

다양한 데이터 입력

한 번에 둘 이상의 변수에 값을 입력하기 위해서는 그에 맞는 여러 개의 변환 문자를 사용하면 된다. 예컨대 , int 타입 x 와 double 타입 y 에 입력 받을 경우 다음과 같이 할 수 있다.

scanf ( ” %d %lf ” , &a , &b ) ;

타입에 맞도록 변환 문자를 나열한 후 변수들 사이는 콤마로 구분한다.
또 다른 예제를 봅시다.

1.int main(void)
2.{
3.	int age;  //나이
4.	double height;  //키
5.
6.	printf("나이와 키를 입력하세요 : "); // 입력 안내 메시지 
7.	scanf("%d %lf", &age, &height);     // 나이와 키를 함께 입력
8.	printf("나이는 %d살, 키는 %.1lfcm입니다\n", age, height);  
9.
10.	return 0;
11.}

정수 타입의 값과 실수 타입의 값을 입력 받는 예제이다. 키는 소수점 이하의 숫자가 필요하므로 실수 타입 변수 height에 저장하고 나이는 정수 타입 변수 age 에 저장한다. 6행은 입력 받기 전 안내 말이다. 주의할 점은 7행의 scanf 함수에 입력을 할 때 나이와 키를 space 키 , tab 키 , Enter 를 이용하여 구분하여 입력해야 한다.