2014년 4월 5일 토요일

[C언어] scanf double형 %f시 문제


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로 구별해줘야 한다.


* 참고자료

Luyin - scanf의 %f %lf의 차이


Written with Dec7.

댓글 없음:

댓글 쓰기