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

2

每次您进行c = fgetc(..)检查c != EOFisdigit(c)使用之前。


智者的话,c应该是int。当然,每个人都知道这一点。

于 2014-02-01T18:36:41.247 回答
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 回答