scanf()
정의
- 지정된 양식으로 값을 입력하여 변수에 저장하는 함수.
형식
1
2
| // 최소 1개의 변수 필요
printf("입력양식", &변수1[, &변수2, &변수3, ...]);
|
| 구분 |
설명 |
| 입력양식 |
- 빈칸 또는 탭 문자 - %를 이용한 양식 변환 문자 그 외의 문자를 포함시켜서는 안된다. |
&변수 |
- 값을 저장할 변수의 주소. - & 는 주소 연산자이다. - 문자열 변수는 &를 붙이지 않는다. (문자열 변수 자체로 주소를 가리키고 있음) |
반드시 값을 입력받을 변수의 주소값, &변수명 에 값을 할당하도록 해야한다.
예시
1
2
3
4
5
| int main() {
int a; // 값을 입력받을 변수 선언
scanf("%d", &a); // 숫자현(%d) 값을 입력받아 변수 a의 주소에 저장
return EXIT_SUCCESS;
}
|
입력 양식
| 변환기호 |
영문 |
설명 |
%d |
decimal |
키보드를 통해 부호 있는 10진 정수(signed)를 입력받음 |
%i |
integer |
키보드를 통해 부호 있는 정수(10진수, 8진수, 16진수)를 입력받음 |
%u |
unsigned |
키보드를 통해 부호 없는 10진 정수를 입력받음 |
%o |
octal |
” 부호 없는 8진수를 입력받음 |
%x, %X |
hexa-decimal |
” 부호 없는 16진수를 입력받음 |
%ld |
long decimal |
” long 정수형을 입력받음 |
%lld |
long long decimal |
” long long 정수형을 입력받음 |
%f |
float |
” 실수형을 입력받음 |
%lf |
double |
” double 실수형을 입력받음 |
%c |
character |
” 한 개의 문자를 입력받음 |
%s |
string |
” 널 문자 \0 로 끝나는 문자열을 입력받음 |
%d 는 십진수 형식의 데이터를 받는 양식이다.
double 형 데이터를 받기 위해서는 lf(long float) 을 써야 한다.
자료형 별 예시
정수형
1
2
3
4
5
6
7
8
9
10
11
| void scanf_int(){
int a;
short b;
long long c;
printf("값을 입력해주세요 : \n");
scanf("%d", &a);
scanf("%hi", &b);
scanf("%llx", &c);
printf("--------------------\n");
printf("%d, %d, %lld\n", a, b, c);
}
|
1
2
3
4
5
6
| 값을 입력해주세요 :
1 # 입력
0x30 # 입력
50 # 입력
--------------------
1, 48, 80 # 출력
|
실수형
1
2
3
4
5
6
7
| void scanf_float(){
float a;
double b;
scanf("%f %lf", &a, &b);
printf("--------------------\n");
printf("%f, %e\n", a, b);
}
|
1
2
3
4
| 1.23
586.193e-4
--------------------
1.230000, 5.861930e-02
|
중간에 콤마를 쓰는 경우
1
2
3
4
5
6
7
| void scanf_with_comma(){
int a;
int b;
scanf("%d, %d", &a, &b);
printf("--------------------\n");
printf("%d, %d\n", a, b);
}
|
1
2
3
| 5
--------------------
5, 46489824
|
- 이 경우 원래처럼 순차적으로
enter를 이용해 값을 분리 입력할 수 없다.
- 순차적으로 입력하면, 앞의 변수에는 값이 저장되지만, 뒤의 변수에는 쓰레기 값이 저장된다.
1
2
3
| 10, 20
--------------------
10, 20
|
- 콤마를 사용할 경우에는, 입력 문자열에서도 콤마로 구분을 해 주어야 한다.
문자형과 문자열
1
2
3
4
5
6
7
8
| void scanf_char_string() {
char a;
char b[100]; // 100개의 문자를 저장할 수 있는 배열. 문자열
scanf("%c", &a);
scanf("%s", b); // 문자열은 &를 쓰지 않는다. (문자열 자체가 주소를 가리킴)
printf("--------------------\n");
printf("%c %s\n", a, b);
}
|
- 문자형을 입력받을 때에는
&a 와 같이 주소 연산자를 사용한다.
- 반면, 문자열을 입력받을 때에는 주소연산자를 쓰지 않는다.
1
2
3
4
5
| # 문자열 중간에 공백이 포함된 경우
S
Grade Card
--------------------
S Grade
|
- 입력 문자열 중간에 공백이 포함된 경우, 공백의 앞쪽 문자열만이 정상적으로 저장된다.
1
2
3
4
5
| # 문자열 가장 앞에 공백이 있는 경우
S
Grade Card
--------------------
S Grade
|
- 입력 문자열 가장 앞에 공백이 있다면, 그 다음 문자열이 저장된다.
1
2
3
4
5
| # 널 문자열 입력
S
Grade\0Card
--------------------
S Grade\0Card
|
Reference
C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)
Comments