2010-03-07 4 views
1
double d; 
scanf("%f", &d); 
printf("%f", d); 

결과 :입출력

입력 : 10.3

출력 : 0.00000

왜? 나는 %ffloat입니다, 출력이 scanf() 10.3 비주얼 스튜디오 2008

+0

이제 문제가 해결되었으므로 http://stackoverflow.com/questions/2377733/how-does-this-program-work를 통해 더 많은 것을 분명히 알 수 있습니다! – Lazer

답변

7

있어야한다고 생각합니다. double의 경우 %lf이 필요합니다. 따라서, 입력 10.3

#include <stdio.h> 
main() { 
    double d; 
    scanf("%lf", &d); 
    printf("%f\n", d); 
} 

10.300000을 생산하고 있습니다.

+0

% 4.1lf 형식의 문자열 +1 Sergey는 다음을 볼 수 있습니다 : http://www.cplusplus.com/reference/clibrary/cstdio/printf/ – stacker

+6

'% lf'은'scanf()'에 필요하지만'printf() ','% f'는'double'을 의미합니다 (그리고'float'도 인수리스트의 변수 부분에서'double'으로 승격되기 때문에'float'과 함께 작동합니다). '% lf'는'printf()'에 의미가 없습니다. – caf

+0

printf는 vararg 함수이므로 인수 프로모션을 적용 할 필요가 없습니다. 컴파일러는 format string 이상의 인수 유형을 알지 못합니다. % lf가 필요하다고 말했습니다. –

1

%f%lf으로 바꾸어보십시오. 은 float을 처리 할 때 사용되며 double이 아닙니다. 또는 dfloat으로 만들 수 있습니다.