K& R的这种实施方式有什么问题?

时间:2016-01-21 15:09:31

标签: c pointers

在K& R第71页中,atof函数正在使用数组索引。我试图使用指针算法实现相同的功能(因为它让人感觉像一个坏蛋:)。)。

double atof(char *str)
{
  int sign;
  double number = 0.0, power = 1.0;

  while( isspace(*str) )
    ++str;

  sign = (*str == '-') ? -1 : 1; // Save the sign

  if(*str == '-' || *str == '+') // Skip the sign
    str++;

  while( isdigit(*str) ) // Digits before the decimal point
  {
    number = 10.0 * number + (*str - '0');
    str++;
  }

  if(*str == '.') // Skip the decimal point
    str++;

  while( isdigit(*str) ) // Digits after the decimal point
  {
    number = 10.0 * number + (*str - '0');
    power *= 10.0;
    str++;
  }


  return sign * number / power;

}

主要

printf("%g\n", atof("  123123.123")); // Outputs 123123
printf("%g\n", atof("  1234.1222"));  // Outputs 1234.12

我的错误是什么?!

1 个答案:

答案 0 :(得分:4)

session.use_only_cookies实施没问题。但是带有atof()的printf会删除部分结果。

如果您没有明确指定,则

%g是默认值。由于结果值具有更高的精度,因此丢失了。指定精度:

6

或者,您可以使用printf("%.12g\n", atof(" 123123.123")); printf("%.12g\n", atof(" 1234.1222")); (虽然会打印尾随零)。