我正在尝试将结构保存到文件中。它工作正常,我可以毫无问题地加载它。但是当我用十六进制编辑器检查我的保存文件时,我可以看到存储在文件中的先前printf的某些部分。我真的不明白这是怎么可能的,特别是当我的程序完全正常加载结构时。
我有三个结构(Orientation,ShipType,Status和PlayerType是枚举,你可以用Int替换它们):
struct Map
{
int width, height;
int* cases;
};
typedef struct Map Map;
struct Ship
{
int x, y, length, firstShoot, color;
int hasBeenDiscovered;
Orientation orientation;
ShipType type;
Status status;
};
typedef struct Ship Ship;
struct Player
{
int activeShips;
Map map[2];
char lastMoves[5][128];
Ship ships[10];
PlayerType type;
int shipcolor[4];
int color;
};
typedef struct Player Player;
这是我的程序树:
main() - > playMenu() - > actionMenu() - >保存()
以下是我的某个菜单(playMenu()
)的屏幕
https://imgur.com/iSvj6jk
我正在谈论的printf部分就是这样:
printf("=========== BATAILLE NAVALE ===========\n"); // You can see part of "=======" in my save file
printf(" ~~~~Jouer une partie~~~~\n\n");
printf("1. Joueur contre joueur\n");
printf("2. Joueur contre ordinateur\n");
printf("3. Charger une partie\n\n"); // You can see "partie"
printf("0. Quitter\n"); // You can see "0. Quitter"
printf("\nVotre choix : "); // You can see "Votre choix"
scanf("%d", &choix);
这是通过十六进制编辑器看到的文件块的屏幕
您可以清楚地看到我的某些菜单是在该文件中编写的。这怎么可能 ? 不幸的是,我不能发布任何更多的代码,因为我必须发布这么多,但你知道是什么原因导致这个以及我需要在哪里解决这个问题吗?
以下是我的save()
函数的代码,您可以看到它与这些菜单无关:
int save(Player players[2], int currentPlayer)
{
int* i;
FILE* file = NULL;
file = fopen("save.txt","w+");
if (file != NULL)
{
fwrite(players, sizeof(Player), 2, file);
fwrite(players[0].map[0].cases, sizeof(int), players[0].map[0].width * players[0].map[0].height, file);
fwrite(players[0].map[1].cases, sizeof(int), players[0].map[1].width * players[0].map[1].height, file);
fwrite(players[1].map[0].cases, sizeof(int), players[1].map[0].width * players[1].map[0].height, file);
fwrite(players[1].map[1].cases, sizeof(int), players[1].map[1].width * players[1].map[1].height, file);
fwrite(¤tPlayer, sizeof(int), 1, file);
}
else
{
// error
}
fclose(file);
return 1;
}