코딩 | 개념 정리/C

[C언어] %f와 ,%lf의 차이점은??

PatienceLee 2021. 4. 14. 15:55

scanf() 함수로 입력을 받고, printf() 함수로 출력을 하다보면,

종종 실수값을 출력하기 위해, %f와 %lf를 쓰곤합니다.

그런데, 매번 이 둘 중 무엇을 써야 되는가? 고민하게 되는 상황이 발생하여 정리를 해보았습니다.

변수 선언시

자료형 / 명칭 크기(비트) 크기(바이트) 값의 표현범위
정수형(부호 有)

short 16bit 2byte -32,768 ~ 32,767 
int 32bit 4byte -2,147,483,648 ~ 2,147,483,647
long 32bit 4byte -2,147,483,648 ~ 2,147,483,647
long long 64bit 8byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
정수형(부호 無)

unsigned short 16bit 2byte 0 ~ 65,535
unsigned int 32bit 4byte 0 ~ 4,294,967,295
unsigned long 32bit 4byte 0 ~ 4,294,967,295
unsigned long long 64bit 8byte 0 ~ 18,446,744,073,709,551,615
실수형
float 32bit 4byte
double 64bit 8byte
long double 64bit 8byte
문자형(부호 有) char 8bit 1byte -128 ~ 127
문자형(부호 無) unsigned char 8bit 1byte 0 ~ 255

입/출력시

형식 지정자 의미
%d 정수를 10진수로 입력한다. (양수, 음수) scanf("%d", &i);
%f float 형의 실수로 입력한다. scanf("%f", &i);
%lf (lf = long float의 줄임말) double 형의 실수로 입력한다. scanf("%lf", &i);
%c 문자 형태로 입력한다. scanf("%c", &i);
%s 문자열 형태로 입력한다. scanf("%s", &i);
%o 정수를 8진수로 입력한다. (양수) scanf("%o", &i);
%x 정수를 16진수로 입력한다. (양수) scanf("%x", &i);
%u 정수를 부호없는 10진수로 입력한다. (양수) scanf("%u", &i);

지수 표기법

실수 지수 표기법 의미
123.45 1.2345e2
12345.0 1.2345e4
0.000023 2.3e-5
2,000,000,000 2.0e9

출력 자릿수 표기법

printf("%3d", num); // 2자리이하의 수 일지라도 공백으로 3자리까지 출력하라.

printf("%.2f",num; // 소수점 아래 둘째자리까지 출력하라.

printf("%5.3f", num); // 정수는 5자리, 소수점 아래는 셋째자리까지 출력하라.

 

위 내용을 모두 이해했을 때 실전에서 우리가 주의해야 될 사항

※값을 scanf()로 입력받을 때

float형에 저장할 것이라면 %f로 받고,

double형에 저장할 것이라면 %lf로 받아야 한다.

 

※값을 printf()로 출력할 때

float형이나 double형이나 C95 버전까지는 %f로 출력해도 상관없었다.

C99 버전에 와서는 입력값을 나눠받는 것처럼 출력값도 나눠서 출력하겠다?! 라는 일관성 명목으로 %lf가 추가되서 double형은 %lf로도 출력이 가능해졌다.

결론, %f로 출력해도 float형이나 double형 모두 이상없이 출력이 가능하다는 것!

 

수업만 듣다가 막상 이렇게 정리하고 나니 깔끔하게 머리에 안착하는 느낌이네요.

 

그럼 오늘도 거운 딩!!

반응형