zoukankan      html  css  js  c++  java
  • 《c程序设计语言》读书笔记-4.2-扩充atof函数

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    #include <ctype.h>
    
    double atof_num(char s[])
    {
        double val,power = 1.0;
        int i,sign,j,val_lat = 0;
    
        for(i = 0; isspace(s[i]); i++)
            ;
        sign = (s[i] == '-') ? -1 : 1;
    
        if(s[i] == '+' || s[i] == '-')
            i++;
        for(val = 0.0; isdigit(s[i]);i++)
            val = 10.0 * val + (s[i] - '0');
        if(s[i] == '.')
            i++;
        for(power = 1.0; isdigit(s[i]);i++)
        {
            val = 10.0 * val + (s[i] - '0');
            power *= 10.0;
        }
        if(s[i] == 'e' || s[i] == 'E')
        {
            i++;
            if(s[i] == '-')
            {
                i++;
                while(isdigit(s[i]))
                {
                    val_lat = 10 * val_lat + (s[i] - '0');
                    i++;
                }
                for(j = 0;j < val_lat;j++ )
                    power *= 10.0;
                return val * sign / power;
            }
    
            else if(s[i] == '+')
            {
                i++;
                while(isdigit(s[i]))
                {
                    val_lat = 10 * val_lat + (s[i] - '0');
                    i++;
                }
                for(j = 0;j < val_lat;j++ )
                    power /= 10.0;
                return val * sign / power;
            }
            else
            {
    
                while(isdigit(s[i]))
                {
                    val_lat = 10 * val_lat + (s[i] - '0');
                    i++;
                }
                for(j = 0;j < val_lat;j++ )
                    power /= 10.0;
                return val * sign / power;
            }
        }
        return val * sign / power;
    }
    
    int main()
    {
        char s[100],c;
        int i = 0;;
        double result;
    
    
        while((c = getchar()) != '
    ')
            s[i++] = c;
        s[i] = '';
    
        result = atof_num(s);
    
        printf("%f
    ",result);
    
    	return 0;
    }
    
    

    1、isspace、isdigit函数在ctype.h中;

    2、else后面不能加判断语句;

    3、s[i++]此类要小心用!

  • 相关阅读:
    处理流之转换流
    处理流之缓冲流 buffered
    java学习笔记 字符流Reader与Writer
    java学习笔记 OutputStream与InputStream
    java学习笔记 Map接口
    java 学习笔记 Iterator 迭代器
    java学习笔记 genenic 范形
    应急响应介绍
    安全之红蓝对抗简介
    密码学基础下篇
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020458.html
Copyright © 2011-2022 走看看