#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;
}
atof函数与第71页中的示例代码完全相同。 atof的返回值大约是100.000。乱序.. 据我所知,getline可以正常工作。不是我第一次输入getline。 我认为atof接收到char数组有问题。 我究竟做错了什么? 请帮忙!
答案 0 :(得分:1)
您的代码有误:
您可能想要这样:
while ((n = getline(input, MAXLINE)) > 0)
{
printf("%s\n", input);
x = atof(input);
printf("%lf\n", x);
}