K&R书籍练习4-2

Hus*_*ada 3 c kernighan-and-ritchie

我正在学习K&R书.我目前在第4章.我正在阅读第71页的atof()函数.函数atof(s)将字符串转换为其双精度浮点等效值.

atof()的代码如下:
// atof:将string s转换为double

double atof2(char s[])
{
   double val, power;
   int i, sign;

   for (i = 0; isspace(s[i]); ++i) //skip white space
       ;
   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;
   }

   return sign * val / power;
Run Code Online (Sandbox Code Playgroud)

}

我的问题是变量:权力.我们为什么需要它?

我确实理解变量的使用:"val"但我不确定变量:"power".为什么我们按功率划分val?

ame*_*yCU 5

变量power用于按功率划分数,以得到浮点数的结果.

让你的字符串成为-12.83,然后第一个for循环将检查空间并增加i为无空间,所以,i=0.

sign-1作为s[i]=s[0]='-'.

在接下来的两个循环中,字符串的值将转换为整数并存储在val(不包括 . - 自己计算)中.

现在两个循环之后val都会1283.但是最后一个循环将迭代2一次并且power将被改变为100.00(10*1.0在第一次迭代和10*10.0第二次迭代中).

现在获取值,因为浮点val除以power 并乘以sign.

那么,它将返回的是-1*1283/100,因此-12.83是你的浮点数.