2012-06-22 173 views
1

我正在處理的程序會創建一個包含高分部分的文件(about.txt)。如何從文件中讀取變量

在名爲.txt線12 ...

純文本(無高分):

- with <0> 

C:

fprintf(about,"-%s with <%ld>",highname,highscore); 

我需要閱讀從比分該文件並在寫入新文件之前測試它是否大於當前高分。

我需要......

if(score > highscore) 
    highscore=score; 

唯一的問題是我如何從文件中得到高分。

我自己做了一些研究,我確定這比我做得更容易,但是當我環顧四周時我找不到任何方法來做到這一點。

謝謝。 /////////////////////////////////編輯/////////////// ///////// 創建文件:

FILE *about; 
    fpos_t position_name; 
    fpos_t position_score; 
    ... 
    fprintf(about,"\n\nHIGHSCORE:\n\n"); 
    fprintf(about,"-"); 
    fgetpos(about,&position_name); 
    fprintf(about,"%s",highname); 
    fprintf(about,"with"); 
    fgetpos(about,&position_score); 
    fprintf(about,"%ld",highscore); 
    fclose(about); 
    ... 

獲取成績:

 FILE *about; 
     about = fopen("about.txt","r"); 

     fseek(about,position_name,SEEK_SET); 
     fscanf(about,"%s",highname); 
     fseek(about,position_score,SEEK_SET); 
     fscanf(about,"%ld",highscore); 
     fclose(about); 

改變變量(注..高分/ highname是全局變量)

if(score >= highscore) //alter highscore 
    { 
     highscore = score; 
     highname = name; 
     puts("NEW HIGHSCORE!!!\n"); 
    } 

我得到錯誤:

error: incompatible types when assigning to type 'char[3]' from type 'char' 

在此行中:

highname = name; 

名稱/分/ highname這裏聲明(在頭文件)/高分:

char name[3]; 
char highname[3]; 
long score; 
long highscore; 
+0

究竟是什麼,你有困難?打開文件,從中獲取數據,讀入/解析文本字符串,然後將文本轉換爲數字值?還有別的嗎? –

+0

您可以使用函數fscanf。它在與fprintf相同的庫中定義。 – Wug

回答

0

您可以使用fscanf的鮮爲人知但很強大的正則表達式的功能,連同其跳過項基於正則表達式的能力:

打開文件,並跳過循環中的前11行。然後閱讀比分,這樣的:

FILE *f = fopen("about.txt","r"); 
int i, score; 
char buf[1024]; 
for (i = 0 ; i != 11 ; i++) { 
    fgets(buf, 1024, f); 
} 
fscanf(f, "%*[^<]%*[<]%d", &score); 
printf("%d\n", score); 

這會將文件到開放<支架中跳過一切,然後跳過支架本身,和讀取的整數項。請注意,格式字符串中的%*表示要被fscanf跳過的條目。 Here is a snippet at ideone

編輯 - 在回答您的編輯額外的問題:你不能指定數組這樣的,你應該使用memcpy代替:

memcpy(highname, name, 3); 
+0

當我嘗試它說錯誤:期望')'在數字常數之前 – Bevilacqua

+0

@Bevilacqua你在某處有語法錯誤。如果您在修改中發佈更改,我認爲我們可以發現它。 – dasblinkenlight

+0

以及我做了這個memcpy(highname,name,3); ...但是如果我按照你的建議做了我不能完全避免這種情況....如果它不是一個數組,它將不能在程序的其他部分工作。我有點困惑於如何去做你建議的事情 – Bevilacqua