我有一个从文件读入的值,并存储为char*.值是货币编号,#.##,##.##或###.##.我想将char*转换为我可以在计算中使用的数字,我尝试了atof和strtod,他们只是给我垃圾数字.这样做的正确方法是什么,为什么我做错的方式呢?
这基本上就是我正在做的事情,只是从文件读入char*值.当我打印出temp和ftemp变量时,它们只是垃圾,巨大的负数.
另一个编辑:
我在gcc中正是这样运行的
#include <stdio.h>
int main()
{
char *test = "12.11";
double temp = strtod(test,NULL);
float ftemp = atof(test);
printf("price: %f, %f",temp,ftemp);
return 0;
Run Code Online (Sandbox Code Playgroud)
}
我的输出是价格:3344336.000000,33444336.000000
编辑:这是我的代码
if(file != NULL)
{
char curLine [128];
while(fgets(curLine, sizeof curLine, file) != NULL)
{
tempVal = strtok(curLine,"|");
pairs[i].name= strdup(tempVal);
tempVal = strtok(NULL,"|");
pairs[i].value= strdup(tempVal);
++i;
}
fclose(file);
}
double temp = strtod(pairs[0].value,NULL);
float ftemp = atof(pairs[0].value);
printf("price: %d, %f",temp,ftemp);
Run Code Online (Sandbox Code Playgroud)
我的输入文件是非常简单的名称,值对如下:
NAME|VALUE
NAME|VALUE
NAME|VALUE
Run Code Online (Sandbox Code Playgroud)
价值是美元金额
解决:谢谢大家,我使用的是%d而不是%f,并且没有包含正确的标题.
use*_*016 28
你缺少一个include :
#include <stdlib.h>,所以GCC创建了一个隐式声明atof和atod,导致垃圾值.
而double的格式说明符%f不是%d(对于整数).
#include <stdlib.h>
#include <stdio.h>
int main()
{
char *test = "12.11";
double temp = strtod(test,NULL);
float ftemp = atof(test);
printf("price: %f, %f",temp,ftemp);
return 0;
}
/* Output */
price: 12.110000, 12.110000
Run Code Online (Sandbox Code Playgroud)