将字符串转换为double的简单代码不起作用

时间:2016-05-26 22:56:48

标签: c string

我的代码必须从文件中获取双号:

#include <stdio.h>   
#include <string.h> 

FILE *fr;           

int main(void)
{
    int n;
    double elapsed_seconds;
    char line[80];
    fr = fopen ("time1.log", "rt");    
    sscanf (line, "%3.6f", &elapsed_seconds);   
    printf ("%3.6f\n", elapsed_seconds);
    fclose(fr);  
} 

现在,time1.log只包含数字0.145213。但该程序打印出0.问题出在哪里?

3 个答案:

答案 0 :(得分:2)

应该是

#include <stdio.h>   
#include <string.h> 

FILE *fr;           

int main(void)
{
    int n;
    double elapsed_seconds;
    char line[80];
    fr = fopen ("time1.log", "rt");   
    fgets(line, 80, fr);                           // <--- Note this line
    sscanf (line, " %lf", &elapsed_seconds);   
    printf ("%3.6f\n", elapsed_seconds);
    fclose(fr);  
} 

这是因为您必须在sscanf该字符串之前将文件中的数据读取到字符串。

答案 1 :(得分:2)

发布的代码缺少关键线:

代码不仅需要打开文件,还需要将文件读入行变量。

在调用fopen()

之后插入
fgets( line, sizeof(line), fr );

或(不太理想)用

替换对sscanf()的调用
fscanf(fr, "%lf", &elapsed_seconds);

注意:如果您保持对sscanf()的调用,则格式字符串应为:“%lf”,与调用fscanf()

相同

使用对fscanf()的调用将允许删除line[]数组。

从不使用变量n,因此应该删除

答案 2 :(得分:0)

在调用sscanf来解析数据之前,您需要从文件中读取数据 - 调用fgets(line,80,fr)