K& R书练习4-2

时间:2015-10-21 11:01:25

标签: c kernighan-and-ritchie

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

atof()的代码如下:
// atof:将字符串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;

}

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

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

1 个答案:

答案 0 :(得分:5)

变量power用于按功率划分数字,以将结果作为浮点数。

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

sign -1s[i]=s[0]='-'

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

现在,两个循环val都是1283。但是,上一个循环将迭代2次,power将在第一次迭代中更改为100.0010*1.0,在第二次迭代中更改为10*10.0)。

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

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