C K&R 4.2 atof函数

C K&R 4.2 atof函数,c,C,atof函数与第71页中的示例代码完全相同。 atof的返回值大约为100.000左右。发生故障的 据我所知,getline运行良好。不是我第一次键入getline。。 我认为atof接收字符数组有问题。 我做错了什么? 请帮忙 您的代码错误: 你可能想要这个: #include <ctype.h> #include <stdio.h> #define MAXLINE 1000 double atof(char []); int getline(char in[], i

atof函数与第71页中的示例代码完全相同。 atof的返回值大约为100.000左右。发生故障的 据我所知,getline运行良好。不是我第一次键入getline。。 我认为atof接收字符数组有问题。 我做错了什么? 请帮忙

您的代码错误:

你可能想要这个:

#include <ctype.h>
#include <stdio.h>
#define MAXLINE 1000

double atof(char []);
int getline(char in[], int maxline);

main()
   {
     char input[MAXLINE];
     int n;
     double x;

     while ((n = getline(input, MAXLINE)) > 0)
        printf("%s\n", input);
     x = atof(input);
     printf("%lf\n", x);
     system("PAUSE");
    }

 int getline(char in[], int maxline)
    {
      int c, i;
      i = 0;
      while ((c = getchar()) != EOF && c != '\n')
         in[i++] = c;
      if (c == '\n')
        in[i++] = c;
      in[i] = '\0';
      return i - 1;
     }

    /*atof convert string to double*/

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

        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;
         }
         return sign * val / power;
       }

这是一个非常简单的错误,非常感谢!堆叠溢出FTW@SungJuneKye欢迎您投票/接受此答案。不幸的是,我的代表未满15岁,因此不会更改公开显示的分数:@SungJuneKye接受答案主要是一种将问题标记为关闭的方式。你不能接受以你的分数回答吗?我刚知道。对不起,我太新了。现在已标记答案。请创建。若getline函数与您的问题无关,那个么删除它并将固定字符串文本传递给atof函数。目前我们不知道您的输入和预期输出是什么。请注意,getline是。如果您要在符合POSIX的系统上编译代码,您可能会看到编译器警告,并且根据您的代码,您可能会遇到意外的失败。
  while ((n = getline(input, MAXLINE)) > 0)
  {
    printf("%s\n", input);
    x = atof(input);
    printf("%lf\n", x);
  }