在 C 中行尾后读取的麻烦

  • 本文关键字:读取 麻烦 c file fgetc
  • 更新时间 :
  • 英文 :


所以,我在读取文件时遇到问题。

我想读这个文件;

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 loadedn",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 ?

非常感谢,对于任何英语错误,我提前

道歉

每次执行c = fgetc(..)请在使用前检查c != EOFisdigit(c)


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

每行最后一个值之后是否存在空白?

如果该行以'0n'而不是'0 n'结尾,则内部循环中对fgetc的调用将在循环第一次终止时读取n,外部循环将读取下一个字符。这将导致您的算术多次产生' ' - '0',这在使用与 ASCII 兼容的字符编码的系统上32-48 = -16

同样,'n' - '0'10-48 = -38.您的问题是每行的最后一个数字后面没有空格。

保存游戏板时,要么在n之前输出一个空白,要么删除上次调用fgetc,因为内部循环已经读取了n

编辑:当 cnicutar 响应时,您还应该检查您的返回值。

最新更新