1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #include <time.h>
  6. #include <ctype.h>
  7.  
  8. double atof_num(char s[])
  9. {
  10. double val,power = 1.0;
  11. int i,sign,j,val_lat = 0;
  12.  
  13. for(i = 0; isspace(s[i]); i++)
  14. ;
  15. sign = (s[i] == '-') ? -1 : 1;
  16.  
  17. if(s[i] == '+' || s[i] == '-')
  18. i++;
  19. for(val = 0.0; isdigit(s[i]);i++)
  20. val = 10.0 * val + (s[i] - '0');
  21. if(s[i] == '.')
  22. i++;
  23. for(power = 1.0; isdigit(s[i]);i++)
  24. {
  25. val = 10.0 * val + (s[i] - '0');
  26. power *= 10.0;
  27. }
  28. if(s[i] == 'e' || s[i] == 'E')
  29. {
  30. i++;
  31. if(s[i] == '-')
  32. {
  33. i++;
  34. while(isdigit(s[i]))
  35. {
  36. val_lat = 10 * val_lat + (s[i] - '0');
  37. i++;
  38. }
  39. for(j = 0;j < val_lat;j++ )
  40. power *= 10.0;
  41. return val * sign / power;
  42. }
  43.  
  44. else if(s[i] == '+')
  45. {
  46. i++;
  47. while(isdigit(s[i]))
  48. {
  49. val_lat = 10 * val_lat + (s[i] - '0');
  50. i++;
  51. }
  52. for(j = 0;j < val_lat;j++ )
  53. power /= 10.0;
  54. return val * sign / power;
  55. }
  56. else
  57. {
  58.  
  59. while(isdigit(s[i]))
  60. {
  61. val_lat = 10 * val_lat + (s[i] - '0');
  62. i++;
  63. }
  64. for(j = 0;j < val_lat;j++ )
  65. power /= 10.0;
  66. return val * sign / power;
  67. }
  68. }
  69. return val * sign / power;
  70. }
  71.  
  72. int main()
  73. {
  74. char s[100],c;
  75. int i = 0;;
  76. double result;
  77.  
  78. while((c = getchar()) != '\n')
  79. s[i++] = c;
  80. s[i] = '\0';
  81.  
  82. result = atof_num(s);
  83.  
  84. printf("%f\n",result);
  85.  
  86. return 0;
  87. }

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

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

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

《c程序设计语言》读书笔记-4.2-扩充atof函数的更多相关文章

  1. 《JavaScript高级程序设计》读书笔记--前言

    起因 web编程过程使用javascript时感觉很吃力,效率很低.根本原因在于对javascript整个知识体系不熟,看来需要找些书脑补一下,同时欢迎众网友监督. 大神推荐书籍 看了博客大神们推荐的 ...

  2. 《Javascript高级程序设计》读书笔记之对象创建

    <javascript高级程序设计>读过有两遍了,有些重要内容总是会忘记,写一下读书笔记备忘 创建对象 工厂模式 工厂模式优点:有了封装的概念,解决了创建多个相似对象的问题 缺点:没有解决 ...

  3. MDX Step by Step 读书笔记(七) - Performing Aggregation 聚合函数之 Max, Min, Count , DistinctCount 以及其它 TopCount, Generate

    MDX 中最大值和最小值 MDX 中最大值和最小值函数的语法和之前看到的 Sum 以及 Aggregate 等聚合函数基本上是一样的: Max( {Set} [, Expression]) Min( ...

  4. 《c程序设计语言》读书笔记-3-3-速记扩充

    #include <io.h> #include <stdio.h> #include <string.h> #include <stdlib.h> i ...

  5. JavaScript高级程序设计(读书笔记)(一)

    本笔记汇总了作者认为“JavaScript高级程序设计”这本书的前七章知识重点,仅供参考. 第一章 JavaScript简介 JavaScript发展简史: 1995年,JavaScript诞生 19 ...

  6. 《JavaScript 高级程序设计》读书笔记

    文章目录 第三章 基本语法 第四章 变量.作用域和内存问题 第五章 应用类型 1. Array 类型 2. RegExp 类型 3. Function 类型 4. String 类型 第六章 面向对象 ...

  7. 《JavaScript高级程序设计》读书笔记--(3)引用类型

    ECMAScript从技术来说是一门面向对象的语言,但不具备传统的面向对象语言所支持的类和接口等基本结构.虽然引用类型与类看起来类似,但是他们并不是相同的概念.引用类型有时也被成为对象定义,因为它描述 ...

  8. 《JavaScript高级程序设计》读书笔记

    Javascript由以下三部分组成: 核心(ECMAScript) 文档对象模型(DOM) 浏览器对象模型(BOM) ECMAScript组成部分: 语法.类型.语句.关键字.保留子.操作符.对象. ...

  9. 《JavaScript高级程序设计》读书笔记 ---Function 类型

    说起来ECMAScript 中什么最有意思,我想那莫过于函数了——而有意思的根源,则在于函数实际上是对象.每个函数都是Function 类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对 ...

随机推荐

  1. Mysql5.7创建存储过程中调用自定义函数报错Not allowed to return a result set from a function

    因为很多存储过程都会共用一段sql语句,所以我把共用的sql封装成一个自定义函数 AddCapital(); 然后通过存储过程调用,创建存储过程会报错1415,Not allowed to retur ...

  2. MySQL 5.7基于GTID的主从复制环境搭建(一主一从)

      Preface       As wel all know,replication base on GTID with row format of binary log is comprehens ...

  3. python 一些基础知识

    Python 注释的原理: 原理:根据对象的引用计数器,对象创建会给对象一个引用计数器属性.如果该属性的值为0,那么该对象会被释放.创建一个字符串对象,但是没有任何引用,计数器为0. Python小整 ...

  4. Oracle导入导出.sql、.dmp文件

    Oracle导出导入表(.sql..dmp文件)两种方法 提示:在导入sql和dmp文件之前,先建立用户,指明表空间.其中要注意用户名和表空间最好跟sql文件中的一样. 建表空间授权参考 :http: ...

  5. 【jQeury】input输入框状态,input事件,blur事件,focus事件

    //输入框正在输入时 $("#test1").on('input',function(){ alert('正在输入'); }) //输入框得到焦点时 $("#test2& ...

  6. ios 苹果内购订单验证 --- php实现

    验证函数: function appleVerify($receipt_data,$orderId = 0) { /* * 21000 App Store不能读取你提供的JSON对象 * 21002 ...

  7. 通信服务器哈希Socket查找(Delphi)

    在Socket通信服务器的开发中,我们经常会需要Socket与某个结构体指针进行绑定.当连接量很大时,意味着需要个高效的查找方法 Delphi中提供了哈希算法类,以此类为基础,修改出Socket专用M ...

  8. python——内建模块instance的学习

    python中内建函数isinstance的用法 语法:isinstance(object,type) 作用:来判断一个对象是否是一个已知的类型. 其第一个参数(object)为对象,第二个参数(ty ...

  9. Effective Approaches to Attention-based Neural Machine Translation(Global和Local attention)

    这篇论文主要是提出了Global attention 和 Local attention 这个论文有一个译文,不过我没细看 Effective Approaches to Attention-base ...

  10. Reward HDU - 2647

    传送门     Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to dis ...