C에서 %f와 %lf의 차이는 무엇입니까?
저는 C 책의 C 예에서 이 두 가지 매개 변수를 본 적이 있지만, 저자는 두 가지의 차이가 무엇인지 자세히 설명하지 않았습니다.나는 그것을 알고 있습니다.%f
합니다.float
그 자리를 대신해야 합니다.저는 이것을 찾아봤지만 설명을 찾는 데 어려움을 겪었습니다. 때어는?%lf
?
간단히 말해서, 그것은 어떤 영향도 주지 않는다는 것입니다.printf
는 ▁of의 을 나타냅니다.float
또는double
scanf
.
위해서printf
형식의 float
으로 double
그래서 둘 다%f
그리고.%lf
는 에사됩다니에 됩니다.double
.위해서scanf
은 야합다니해를 사용해야 .%f
위해서float
그리고.%lf
위해서double
.
아래 언어 변호사에 대한 자세한 내용은 다음과 같습니다.
사이에 차이는 없습니다.%f
그리고.%lf
에 시대에printf
ISO C 참조), ISO C 섹션(C11 참조),7.21.6.1 The fprintf function
, 락단/7
태상의 , 의l
수식어(나의 강조점):
에 오는 " 항을지니다합정목다음다▁a"를 합니다.
d
,i
,o
,u
,x
또는X
는 변환지 에적니다됩용에 됩니다.long int
또는unsigned long int
다음과 같은 주장n
변환 지정자는 에 대한 포인터에 적용됩니다.long int
다음과 같은 주장c
는 변환지 에적니다됩용에 됩니다.wint_t
다음과 같은 주장s
변환 지정자는 에 대한 포인터에 적용됩니다.wchar_t
인수; 또는 다음 , , , , , 또는 변환 지정자에 영향을 주지 않습니다.
가 없는 는 정할필없이입니다.f
지정자는 해당 지정자가 이미 다음을 의미하기 때문입니다.double
락부에서./8
합니다.%f
지정자:
A
double
됩니다.
인수가 섹션에 기본 .6.5.2.2 Function calls
, 락단/7
:
함수 프로토타입 선언기의 생략 부호로 인해 마지막으로 선언된 매개 변수 뒤에 인수 형식 변환이 중지됩니다.기본 인수 승격은 후행 인수에 대해 수행됩니다.
때부터printf
(그리고 가족 전체가.printf
functions)는 like functions)로 됩니다.int printf(const char * restrict format, ...);
생략 부호 표기법을 사용하면, 그 규칙이 여기에 적용됩니다.은 섹션 섹다룹다니서에션에서 .6.5.2.2 Function calls
, 락단/6
:
호출된 함수를 나타내는 식은 프로토타입을 포함하지 않는 유형을 가질 경우 각 인수에 대해 정수 승격이 수행되고 유형이 있는 인수는 로 승격됩니다. 이를 기본 인수 승격이라고 합니다.
의 scanf
가족, 그것은 사용을 의무화합니다.double
보다는 니▁rather▁a.float
.7.21.6.2 The fscanf function /11
:
에 오는 " 항을지니다합정목다음다▁a"를 합니다.
d
,i
,o
,u
,x
,X
또는n
형지포 있는적인용다니됩수에 대한 포인터가 됩니다.long int
또는unsigned long int
, , , , , , , , 또는 변환 지정자가 형식 포인터가 있는 인수에 적용되는 것; 또는 다음이 되는 것c
,s
또는[
형지포 있는적인용다니됩수에 대한 포인터가 됩니다.wchar_t
.
이것은 다음을 수정합니다./12
다음 섹션의 단락에서 다음과 같이 명시합니다.%f
:
으로 서명된 번호 ""와 합니다."와 일치합니다.
NaN
은 그형대 의 주어 에 대해 .strtod
기능▁. 인수는여야 합니다.해당 인수는 부동의 포인터여야 합니다.
위해서scanf
,%f
을 읽어 들입니다.float
,그리고.%lf
을 읽어 들입니다.double
.
위해서printf
C99 이상에서는 둘 다 동일하며 다음 중 하나를 인쇄합니다.float
는또.double
C89는%lf
정의되지 않은 행동을 야기했지만, 그것을 다음과 같이 취급하는 것은 일반적인 확장이었습니다.%f
.
에서 하나의 지정자를 두 개의 다른 유형에 사용할 수 있는 이유printf
기본 인수 승격 때문입니다. 인수 형식입니다.float
으로 double
함수를 호출할 때 사용되고 함수 프로토타입의 매개 변수와 일치하지 않을 때.printf
냥보다를 double
어떤 경우에도
printf 패밀리 함수를 사용하는 출력의 경우 %f와 %lf 지정자는 동일한 의미를 갖습니다. l은 무시됩니다.둘 다 더블 형식의 인수가 필요하지만, 플로트 형식의 인수는 더블로 승격되므로 플로트 형식에 대한 별도의 지정자가 없습니다.(이 프로모션은 printf와 같은 다양한 기능과 프로토타입 없이 선언된 기능에만 적용되며 일반적인 기능 호출에는 적용되지 않습니다.)롱 더블 유형의 경우 올바른 형식 지정자는 %Lf입니다.
스캔 기능 패밀리를 사용하는 입력의 경우 부동 소수점 형식 지정자는 %f, %lf 및 %Lf입니다.이러한 개체에는 각각 float, double 및 long double 형식의 개체에 대한 포인터가 필요합니다. (인수가 포인터이기 때문에 float-to-double 승격은 없습니다.플로트 값은 두 배로 승격할 수 있지만 포인터가 실제 플로트 개체를 가리켜야 하기 때문에 플로트* 포인터는 두 배로 승격할 수 없습니다.)
그러나 숫자 입력과 함께 스캔 기능을 사용할 때는 주의해야 합니다.정의된 오버플로 검사가 없으며 입력이 유형의 범위를 벗어나면 프로그램 동작이 정의되지 않습니다.안전을 위해 입력을 문자열로 읽은 다음 strtod와 같은 것을 사용하여 숫자 값으로 변환합니다.오류를 탐지하는 방법은 설명서를 참조하십시오.
%lf의 너비 한정자는 printf()에 의해 정상적으로 무시됩니다.더 정확하게 말하면, %f는 이중 변수를 사용하여 항상 float 인수를 두 배로 승격시킵니다.
언급URL : https://stackoverflow.com/questions/25860850/what-is-the-difference-between-f-and-lf-in-c
'programing' 카테고리의 다른 글
Powershell: 문자열을 숫자로 변환 (0) | 2023.08.16 |
---|---|
Angular CLI에서 상대 경로 방지 (0) | 2023.08.16 |
아이폰에서 투명한 PNG 이미지를 염색하는 방법은 무엇입니까? (0) | 2023.08.16 |
반투명 배경을 만들려면 어떻게 해야 합니까? (0) | 2023.08.16 |
HTML/CSS를 사용하여 텍스트에 공백/탭을 삽입하는 방법 (0) | 2023.08.16 |