0

そのため、ファイルからの読み取りに問題があります。

このファイルを読みたいです。

    1

0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0
0 0 0 2 0 0 0 0
0 0 0 2 1 0 0 0
0 0 1 2 2 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 

最初の 1 はプレイヤーで、配列はゲーム ボードです。

だから私はこのコードを使ってこれをすべて読もうとしています:

void initialize_file(Game *game)
{
    int i,j;
    FILE *file = fopen("save.sav", "r");
    if(file==NULL)
    {
        printf("Can't read file.... \n");
    }
    else
    {
        game->player=(fgetc(file)-'0');
        printf("Player %d loaded\n",jeu->player);
        fgetc(file); //jump the two lines after player
        fgetc(file);
        for(i=0;i<8;i++)
        {
            for(j=0;j<8;j++)
            {
                Game->game[i][j] = (fgetc(file)-'0');
                printf("value : %d \n",Game->game[i][j]);
                fgetc(file);

            }
            fgetc(file);
        }
    }
}

私の問題は、-16 や -38 のように、それぞれが Space と LF を参照するように、配列の外側に値を取得することがあるということです。したがって、私の質問は次のとおりです。これらの -16 および -38 に遭遇しないようにするにはどうすればよいですか?

どうもありがとうございました。英語の間違いについては事前に申し訳ありません

4

2 に答える 2

0

各行の最後の値の後に空白がありますか?

'0\n'行がではなく で終わる場合、内側のループで を'0 \n'呼び出すと、ループが最初に終了したときに が読み取られ、外側のループが次の文字が読み取られます。これにより、ASCII と互換性のある文字エンコーディングを使用するシステム上で、算術演算が何度も発生します。fgetc\n' ' - '0'32-48 = -16

同様に、'\n' - '0'です10-48 = -38。問題は、各行の最後の数字の後に空白が続かないことです。

\nゲームボードを保存するときにの前に空白を出力するかfgetc、内側のループが既に を読み取っているため、 の最後の呼び出しを削除します\n

編集: cnicutar が応答したように、戻り値も確認する必要があります。

于 2014-02-01T18:53:15.383 に答える