scanf 함수에 대해

프로그래밍/C 2018.09.06 댓글 Plorence
scanf함수


scanf는 입력에 사용됩니다. (사용자에게 입력을 받아야 할때)
예를들어서 내 나이를 입력받고 싶다면 Scanf함수를 호출(사용)해야 합니다.
scanf함수는 printf함수와 똑같은 formatted(서식이 지정된) 형태입니다. scanf함수도 stdio.h라는 헤더파일에 포함되어 있습니다.

사용방법은 규칙상 printf함수와 동일하지만 원래의 출력부분이 다릅니다.
1
scanf("서식문자"&변수);
예제코드

scanf 함수의 호출을 위해서는 두 가지 정보가 필요합니다.
  1.  어디에 저장할것인가?
  2.  어떤 형태로 받아 들일것인가?
앞서 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(값이 넘어감)라서 저장할 공간의 주소(현실로 따지면 집주소)를 넘겨주고  처리해야합니다.
이부분에 대해서는 포인터를 배우시면 이해가 갈겁니다. 지금은 그냥 &를 붙여야한다고 생각하시면 됩니다.

만약 서식문자가 의미하는 자료형과 변수의 자료형이 다르면?

결과 이미지

사진과 같이 런타임 에러가 발생하게 됩니다.

오타나 틀린 내용은 댓글로 남겨주시면 감사합니다.


댓글