我的代码必须从文件中获取双号:
#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.问题出在哪里?
答案 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)
。