0. 환경
macbook-pro 13” 2012 mid / 10GB
GCC
1. 문제점
scanf를 사용할 때 double형 변수를 %f로 입력받는 경우
결과처럼 숫자를 제대로 인지 못하는 경우가 발생
#include <stdio.h>
int main (void) {
double on;
scanf ("%f", &on);
printf ("result: %f\n", on);
return 0;
}
# 결과
$ ./a.out
100
result: 0.000000
2. 해결책
#include <stdio.h>
int main (void) {
double on;
# 아래와 같이 수정함
# scanf ("%f", &on);
scanf ("%lf", &on);
printf ("result: %f\n", on);
return 0;
}
3. 의문
printf는 double형도 %f로 해도 잘 되는데 왜 scanf는 문제가 발생하는가?
scanf는 모든 자료형의 입력을 받을 수 있어야만하므로
모든 파라미터를 void형 포인터로 받는다.
따라서 포인터 정보로 해당 자료형(double인지 float인지)의 정보를 알 수 없다.
그러므로 float와 double을 각각 %f, %lf로 구별해줘야 한다.
* 참고자료
Written with Dec7.
댓글 없음:
댓글 쓰기