int scanf(const char* _Format, ...)
scanf 함수는 사용자에게 입력을 받기위한 함수입니다.
printf와 같이 입력양식변환기호(서식문자)를 이용하여 입력받을 수 있습니다.
첫번째 인자는 입력 양식 기호의 문자열입니다.
...은 입력양식변환기호에 대응하는 저장될 변수의 주소입니다.
서식문자 | 자료형 | 출력형태 |
---|---|---|
%d | int | 10진수 정수 |
%ld | long | |
%lld | long long | |
%o | int | 8진수 정수 |
%x | 16진수 정수 | |
%f | float | float형 실수 |
%lf | double | double형 실수 |
%Lf | long double | long double형 실수 |
%c | char | ASCII 코드 값에 대응하는 문자 |
%s | char* | 문자열 |
입력양식변환기호는 printf함수의 출력양식변환기호와 그 의미가 비슷합니다.
동시에 여러개의 입력을 받으려면 입력양식기호를 공백으로 구분하여 작성하면 됩니다.
#include <stdio.h>
int main(void) {
int a, b, c;
printf("1개의 정수를 입력하세요 : ");
scanf("%d", &a); // 10진수 입력
printf("2개의 정수를 입력하세요 : ");
scanf("%o %x", &b, &c); // 8진수, 16진수로 입력
printf("%d %d %d \n", a, b, c);
return 0;
}
scanf 함수 2번째 인자값에 변수를 전달하는 과정에서 &(주소 연산자)가 붙어있는 것을 볼 수 있습니다.
&(주소연산자)는 변수의 주소를 나타내는 연산자이며 이는 포인터를 공부할때 자세히 알아보고 지금은 그냥 저렇게 해야 하는구나 정도로만 이해 하도록 하세요.
출력양식기호에서는 은 %f가 float형과 double형 모두이지만,
입력양식기호에서는 %f는 float, %lf가 double 자료형으로 입력되는것을 주의하시면 됩니다.
#include <stdio.h>
int main(void) {
float a;
double b;
long double c;
printf("float형 실수 입력 :");
scanf("%f", &a);
printf("double형 실수 입력 :");
scanf("%lf", &b);
printf("long double형 실수 입력 :");
scanf("%Lf", &c);
printf("float : %f\n", a);
printf("double : %f\n", b);
printf("long double : %Lf\n", c);
return 0;
}
실수 입력시 e표기법으로 입력을 해도 됩니다.
두개 이상을 입력받을때는 공백으로 구분하여 입력을 받지만 ,
%c 문자입력의 경우 다음과 같이 공백구분을 하지 않아도 각 문자에 대응하여 자료가 저장됩니다.
#include <stdio.h>
int main(void) {
char a, b;
printf("두개의 문자를 입력하세요 : ");
scanf("%c %c", &a, &b);
printf("입력된 문자 : %c 정수표현 : %d \n", a, a);
printf("입력된 문자 : %c 정수표현 : %d \n", b, b);
return 0;
}
문자열을 입력받을 때에는 &(주소연산자) 없이 변수를 전달하면 됩니다.
#include <stdio.h>
int main(void) {
char a[255];
char b[255];
printf("두개의 문자열을 입력하세요.");
scanf("%s %s", a, b);
printf("첫번째 문자열 : %s\n", a);
printf("두번째 문자열 : %s\n", b);
return 0;
}
변수 a와 b는 배열이고 이것은 주소라는것을 유추해 보실수 있습니다.
자세한 내용은 포인터와 배열에서 다룹니다.
지금은 문자열을 입력받을땐 &(주소연산자)는 빼야 한다는 것을 기억하시면 됩니다.