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 를 이용하여 구분하여 입력해야 한다.