2016-05-26 64 views
0

我必須得到該文件的雙號的代碼:與convertation簡單的代碼串入雙不起作用

#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

你需要FREAD成'line'第一... –

+1

'與fgets(行,行的sizeof,FR);''之前sscanf'。然後'sscanf(line,「%lf」,&elapsed_seconds);調用'fopen()'時調用' – BLUEPIXY

+0

,總是檢查(!= NULL)返回值以確保操作成功 – user3629249

回答

2

張貼代碼缺少一個臨界線:

不僅代碼需要打開該文件,它也需要讀取文件入行變量。

要麼插入,只是調用fopen()

fgets(line, sizeof(line), fr); 

或(不太理想)後

fscanf(fr, "%lf", &elapsed_seconds); 

注意更換調用sscanf():如果您保持呼叫sscanf()然後格式字符串應爲:「%lf」,與致電fscanf()

的呼叫相同,使用對的呼叫將允許消除line[]陣列。

變量n從未使用過,所以應該被淘汰

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之前,從文件中讀取到字符串數據荷蘭國際集團該字符串。

0

在致電sscanf解析數據之前,您需要讀取文件中的數據 - 請致電fgets(line,80,fr)

相關問題