Native/C

char 를 float로 변경하라

aucd29 2013. 10. 2. 18:49
/**********************************************************************
*
*        2005-04-12
*        문자열을 실수형 데이터로 만들어 주어라
*
***********************************************************************/

#include <stdio.h>
#include <string.h>

#define MAX 100

void main(void)
{
    float fRes=0.0;
    int sign=1, i=0, cnt=1, iRes=0, len=0,jumKind=0;
    int sosu=0, temp=0;
    char s[MAX];

    //
    // input data
    //
    scanf("%s",s);

    if(s[0]=='-')
    {
        sign = -1;
        i=1;
    }

    //
    // 소수점 이상 내용 가져오기
    //
    len = strlen(s);
    for(;i<len;i++)
    {
        if(s[i]=='.') { jumKind=1; break;}

        if(s[i]>='0'&&s[i]<='9')
        {
            if(!iRes)
                iRes += s[i]-'0';
            else
                iRes = iRes * 10 + (s[i] - '0');
        }
    }

    //
    // 소수점을 넣지 않았을때
    //
    if(jumKind)
    {
        //
        // 소수점 이하 내용 가져오기
        //
        i = len-1;
        while(s[i]!='.')
        {
            if(s[i]>='0'&&s[i]<='9')
            {
                if(!sosu) sosu = (s[i] - '0');
                else
                {
                    temp = s[i]-'0';
                    if(temp>0)
                        sosu = sosu + (temp * cnt);    // 0 인 것은 무시하고 이상인것은 해당 자리수에 맞게 cnt한 값을 넣어준다.
                }
                --i;
                cnt*=10;
            }
        }
        fRes = ((float)sosu / cnt + iRes) * sign;
    }
    else
    {
        fRes = (float)iRes * sign;
    }
    
    printf("값을 뿌리자 : %f",fRes);
    printf("\n");
}