c언어 scanf로 입력 받을 때 double과 float형을 어떻게 구분해야하는지

scanf("%d",&val); 와 printf("%d",val);
을 보면 왜 & scanf에는 참조기호가 붙는지 의아해 해 본 경험이 있다.
입력을 받을 때는 입력받은 값의 포인터를 전달 받는다. 출력을 할 때는 값을 전달한다.

이 때문에 float와 double을 scanf로 입력받을 때 %f인지 %lf인지 명시해주어야 한다.
입력 받을 때는 일종의 void형 포인터를 전달받는 것으로 입력받은 값이 float인지 double인지 알 수 없다. 따라서 4byte float을 받을 때는 %f 8byte double을 받을 때는 %lf로 자료형에 대한 정보를 미리 줘야한다.

printf는 값을 전달하기 때문에 자료형과 대응하는 크기를 알 수 있기 때문에 float을 출력하든 double을 출력하든 %f로 해주면 된다.

사용자 정의 함수의 경우도 입력받을 때는 마찬가지이지만 대개는 자료형이 고정되어 있다.
scanf처럼 자료형이 가변적일 경우에는 포인터의 크기에 대한 정의가 필요하다.

참고 사이트http://luyin.tistory.com/276

댓글