2013-02-26 47 views
0

我有一個這樣的文件,我需要從它的最後一行的一些值。這是文件:我如何閱讀文件的最後一行?

 
XFOIL Version 6.96 

Calculated polar for: pane 

1 1 Reynolds number fixed Mach number fixed 

xtrf = 1.000 (top) 1.000 (bottom) 
Mach = 0.000 Re = 0.100 e 6 Ncrit = 4.000 

alpha CL CD CDp CM Top_Xtr Bot_Xtr 
------ -------- --------- --------- -------- -------- -------- 
0.000 0.3882 0.01268 0.00440 -0.0796 0.6713 1.0000 

我想要做的是閱讀的alphaCLCD位於最後一行的值。

我使用此代碼

#include <stdio.h> 
#include <stdlib.h> 


int main() 
{ 
    FILE * pFile; 
    FILE * test1; 

    char ch; 
    double alpha,lift,drag; 
    int i; 

    pFile = fopen("save.txt","r"); 
    test1 = fopen("test1.txt","w"); 

    fseek (pFile , 434 , SEEK_SET); 

    while((ch = fgetc(pFile)) != EOF){ 
     fputc(ch, test1); 
    } 

    for(i = 0; i < 3; i++) 
    { 

    fscanf(test1, "%lf ",&alpha); 
    fscanf(test1, "%lf ",&lift); 
    fscanf(test1, "%lf",&drag); 

    } 

    printf("alpha = %lf cl = %lf cd = %lf",alpha,lift,drag); 

    fclose(test1); 
    fclose (pFile); 
    return 0; 
} 

預先感謝您...

Guys thank you all for your answers what i forgot 

提的是,它打印出的是阿爾法= 0.00000 CL = 0.00000 CD = 0.00000,實際上是非零但是 0.000 0.3882 0.01268相應... !!

+1

什麼不按預期工作? – 2013-02-26 22:38:45

+0

將每行的值讀入相同的變量。由於最後一行是最後一行,因此變量將以最後一行的值結束。 – 2013-02-26 23:13:54

回答

3
pFile = fopen("save.txt","r"); 
    test1 = fopen("test1.txt","w"); 

您正在閱讀開放save.txt,並test1.txt進行寫操作。

fseek (pFile , 434 , SEEK_SET); 

    while((ch = fgetc(pFile)) != EOF){ 
     fputc(ch, test1); 
    } 

您現在跳過字符434 save.txt,然後讀取文件的其餘部分,打印每個字符伸到test1.txt

for(i = 0; i < 3; i++) 
    { 

    fscanf(test1, "%lf ",&alpha); 
    fscanf(test1, "%lf ",&lift); 
    fscanf(test1, "%lf",&drag); 

    } 

你正試圖從test1.txt閱讀,但它是開放的寫作,當前位置是在文件的結尾。如果你想讀取它,你需要關閉它並打開它進行讀取,或者打開它,讀寫(fopen(..., "rw")),然後在開始讀取之前將當前位置重置到文件的開頭(它是未定義如果你不這樣做會發生什麼)。

實際上,您不應該跳過一個字節偏移量,將最後一行復制到另一個文件中,然後讀取該新文件。您可以直接從原始文件中讀取最後一行。不需要從一個文件讀入另一個文件的循環;只需在原始文件上運行您的scanf()即可。

記得檢查你的函數調用錯誤。您撥打的scanf()調用可能會返回錯誤。你可以用ferror(file)檢查錯誤,並用strerror(errno)得到實際的錯誤信息。

+0

謝謝大家的回答我忘了提及的是,它打印出alpha = 0.00000 cl = 0.00000 cd = 0.00000其實非零但是0.000 0.3882 0.01268相應... !! – user2019482 2013-02-27 10:55:44

+0

您是否嘗試了我提出的建議?他們幫忙了嗎?你能否展示新版本,並指出它出了什麼問題? – 2013-02-27 15:35:27

相關問題