본문 바로가기

IT/C++

[C언어] Printf 의 %lf, %f와 Scanf의 %lf, %f의 차이

double형은 scanf를 할 때, 왜 %lf를 해줘야 하고 printf를 할 때는 %f 로 해주어야 하나?

printf 는 포인터가 아닌 값을 받기 때문에 파라미터 리스트에서 각각의 데이터

크기를 알 수 있습니다.

포맷 문자가 f 이고 파라미터 크기가 4면 float로 처리하고

포맷 문자가 f 이고 파라미터 크기가 8이면 double로 처리하게 됩니다.

 

scanf는 입력을 받아야 하니까 모든 파라미터를 포인터로 받게 되죠.

하지만, 포인터는 그 주소값 4byte만 전달될 뿐

해당 포인터가 가리키는 자료형이 무엇인가는 전달되지 않습니다.

즉, scanf가 전달받는 포인터는 void타입 포인터라고 보면 됩니다.

      그렇기 때문에 float와 double을 f lf로 구분해줘야 하는 거죠.

 

물론 사용자가 만든 함수도 파라미터 전달시 타입정보는 전달되지 않습니다.

받을 수 있는 타입이 첨부터 고정되어 있을 뿐이죠. scanf처럼 타입이 가변형인

경우는 타입 정보를 명시해줄 수 있는 수단이 필요하겠죠. 그게 포맷정보입니다.



출처: https://luyin.tistory.com/276 [Luyin]

'IT > C++' 카테고리의 다른 글

cpprest , rest 라이브러리로 C++로 http 통신 구하기  (0) 2020.11.09
[C++] sort algorithm 정리 및 예시  (0) 2020.10.13
Array, Vector (정적배열, 동적배열)  (0) 2020.10.13
ASCII 코드표  (0) 2020.10.13
C++STL -> string  (0) 2020.10.13