1

私が取り組んでいるプログラムは、ハイスコア セクションを含むファイル (about.txt) を作成します。

.txt の 12 行目は...

プレーン テキスト (ハイスコアなし):

- with <0>

子:

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);

変数の変更 (注意.. highscore/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;

ここで宣言された名前/スコア/ハイネーム/ハイスコア(ヘッダーファイル内):

char name[3];
char highname[3];
long score;
long highscore;
4

2 に答える 2

0

これを行うにはを使用fscanfする必要があります。fprintfの逆に少し似ています。

こちらのドキュメントをご覧ください:http: //cplusplus.com/reference/clibrary/cstdio/fscanf/

于 2012-06-22T17:42:13.940 に答える
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これは ideone のスニペットです

編集- 編集からの追加の質問への回答: そのような配列を割り当てることはできません。memcpy代わりに使用する必要があります:

memcpy(highname, name, 3);
于 2012-06-22T18:00:40.483 に答える