scanf함수
scanf는 입력에 사용됩니다. (사용자에게 입력을 받아야 할때)
예를들어서 내 나이를 입력받고 싶다면 Scanf함수를 호출(사용)해야 합니다.
scanf함수는 printf함수와 똑같은 formatted(서식이 지정된) 형태입니다. scanf함수도 stdio.h라는 헤더파일에 포함되어 있습니다.
사용방법은 규칙상 printf함수와 동일하지만 원래의 출력부분이 다릅니다.
1 |
scanf("서식문자", &변수); |
예제코드
scanf 함수의 호출을 위해서는 두 가지 정보가 필요합니다.
- 어디에 저장할것인가?
- 어떤 형태로 받아 들일것인가?
앞서 printf 함수에 대해 공부할때 알려준 서식문자를 이용합니다.
%d,%x,%o..
1
2
3
4
5
6
7
8
|
#include <stdio.h>
int main(void)
{
int num1,num2,num3;
scanf("%d %x %o",&num1,&num2,&num3);
}
|
cs |
예제코드
%d는 10진수 정수의 형태로
%x는 16진수 정수의 형태로
%0는 8진수 정수의 형태로
그럼 실수는요?
1
2
3
4
5
6
7
8
9
|
#include <stdio.h>
int main(void)
{
float num1;
double num2;
long double num3;
scanf("%f %lf %Lf",&num1,&num2,&num3);
}
|
서식문자와 인자만 다르지 앞서 말했던 정수와 별다를바없습니다.
실수 입력 과정에서 e표기법을 입력해도 됩니다.
float,double,long double의 데이터 출력에 사용되는 서식문자는 %f,%f,%Lf입니다.
float,double,long double의 데이터 출력에 사용되는 서식문자는 %f,%lf,%Lf입니다.
결국 double은 출력할때는 %f,입력받을때는 %lf의 차이뿐입니다.
서식문자의 종류
서식문자 |
자료형 |
형태 |
%d |
char,short,int |
부호 있는 10진수 정수 |
%ld |
long |
부호 있는 10진수 정수 |
%lld |
long long |
부호 있는 10진수 정수 |
%u |
unsigned int |
부호 있는 10진수 정수 |
%o |
unsigned int |
부호 있는 8진수 정수 |
%x,%X |
unsigned int |
부호 있는 16진수 정수 |
%f |
float,double |
10진수 방식의 부동소수점 실수 |
%Lf |
long double |
10진수 방식의 부동소수점 실수 |
%e,%E |
float,double |
e 또는 E 방식의 부동소수점 실수 |
%g,%G |
float,double |
값에 따라 %f와 %e 사이에서 선택 |
%c |
char,short,int |
값에 대응하는 문자 |
%s |
char * |
문자열 |
%p |
void * |
포인트 주소값 |
저번에 배운 printf함수와 동일한 서식문자를 사용하지만, 사용빈도가 적은것도 있습니다. 상황에따라 적절하게 쓰시면 됩니다.
변수앞에 &는 왜써요?
이걸 이해할려면 포인터와 scanf함수를 깊게 파고 들어가야하는데,간단하게 설명하자면 C언어에서는 call by value(값이 넘어감)라서 저장할 공간의 주소(현실로 따지면 집주소)를 넘겨주고 처리해야합니다.
이부분에 대해서는 포인터를 배우시면 이해가 갈겁니다. 지금은 그냥 &를 붙여야한다고 생각하시면 됩니다.
만약 서식문자가 의미하는 자료형과 변수의 자료형이 다르면?
결과 이미지
사진과 같이 런타임 에러가 발생하게 됩니다.
오타나 틀린 내용은 댓글로 남겨주시면 감사합니다.
댓글