programing

printf()는 "%f"만 사용해도 되는데, 왜 스캔f()는 두 배로 "%lf"가 필요합니까?

goodsources 2022. 7. 10. 21:24
반응형

printf()는 "%f"만 사용해도 되는데, 왜 스캔f()는 두 배로 "%lf"가 필요합니까?

왜?scanf()필요한 것은l「 。%lf"를 읽을 때double,언제printf()" 를 사용할 수 있습니다.%f그 논거가 의론인지 아닌지에 관계없이double또는float?

코드 예:

double d;
scanf("%lf", &d);
printf("%f", d);

C는 변수 인수를 사용하는 함수에 대해 플로트를 더블로 승격하기 때문입니다.포인터는 어떤 것으로도 승격되지 않기 때문에 사용하셔야 합니다.%lf,%lg또는%le(또는%laC99)를 더블로 읽습니다.

с99 since 、 C の format specificator floating floating point types in타입의 매칭은 다음과 같이 일치합니다.printf그리고.scanf.그렇다.

  • %f위해서float
  • %lf위해서double
  • %Lf위해서long double

우연히도 이런 유형의 논쟁이float변수 매개 변수로 전달되며 이러한 인수는 암묵적으로 유형으로 변환됩니다.double이게 바로 이 이유에요.printf포맷 지정자%f그리고.%lf동등하고 호환성이 있습니다.printf'교차 사용' 가능%lf와 함께float또는%f와 함께double.

하지만 실제로 그렇게 할 이유는 없습니다.사용하지 않다%f로.printf형식 인수double이것은 C89/90년에 태어난 일반적인 습관이지만 나쁜 습관입니다.사용하다%lfprintf위해서double그리고 계속%f을 위해 예약된.float논쟁들.

C 식에서 부동 또는 이중 값을 사용하면 값이 이중이므로 printf는 차이를 구별할 수 없습니다.반면, 더블 포인터는 명시적으로 scanf에 시그널링을 해야 합니다.이것은 포인터가 가리키는 것이 중요하기 때문입니다.

scanf에 의해 지적되는 데이터의 크기를 알 필요가 있다&d바리에이티브 함수는 플로트를 2배로 촉진합니다(이유는 완전히 확실하지 않습니다).printf항상 얻어지고 있다double.

그렇지 않으면 scanf는 더블보다 작은 크기의 플로트에 포인터를 전달하고 있다고 생각하고 잘못된 값을 반환합니다.

언급URL : https://stackoverflow.com/questions/210590/why-does-scanf-need-lf-for-doubles-when-printf-is-okay-with-just-f

반응형