我正在開發一個游戲程式,它要求我將一個 2D 陣列保存到一個檔案中,然后如果用戶想要回傳該游戲,則可以將其重新加載并繼續。但是我在將陣列保存到 txt 檔案時遇到了問題。而對于加載功能,它無法加載任何東西。用戶應該選擇加載選項,它應該能夠使用陣列呼叫 txt 檔案,然后允許他們繼續玩游戲。
這是我的保存功能
void save(char *filename)
{
FILE *fp = fopen(filename, "wb");
fwrite(&size, sizeof(size), 1 , fp);
fwrite(board, sizeof(int), size, fp);
if(fp == NULL)
return;
fclose(fp);
}
這是我的加載功能
void load(char *filename)
{
FILE *fp = fopen(filename, "rb");
fread(&size, sizeof(size), 1 , fp);
fread(board, sizeof(int), size, fp);
if(fp == NULL)
return;
fclose(fp);
}
在代碼的后面,我使用選單來呼叫這些函式。任何幫助將不勝感激!
uj5u.com熱心網友回復:
board不是一個二維陣列,它是一個指向行的指標陣列。您需要遍歷它,分別寫入和讀取每一行。
由于正在加載的板卡的大小可能與當前記憶體中的板卡不同,因此您需要在加載時釋放舊板并重新分配新板。
void save(char *filename)
{
FILE *fp = fopen(filename, "wb");
if (!fp) {
perror("Can't open save file");
return;
}
fwrite(&size, sizeof(size), 1 , fp);
for (int i = 0; i < size; i ) {
fwrite(board[i], sizeof(*board[i]), size, fp);
}
fclose(fp);
}
void load(char *filename)
{
FILE *fp = fopen(filename, "r");
if (!fp) {
perror("Can't open save file");
return;
}
if (board) {
for (int i = 0; i < size; i ) {
free(board[i]);
}
free(board);
}
fread(&size, sizeof(size), 1 , fp);
board = malloc(size * sizeof(*board));
for (int i = 0; i < size; i ) {
board[i] = malloc(size * sizeof(*board[i]));
fread(board[i], sizeof(*board[i]), size, fp);
}
fclose(fp);
}
uj5u.com熱心網友回復:
首先,邊寫邊RB加載。其次,不要忘記在輸入FILE命令后關閉所有檔案。
另外,我有一些建議給你:總是檢查是否*fp等于NULL;它非常適合除錯并且可以對您的代碼產生巨大影響。您還可以在程式中使用檔案時撰寫一個用于多次檢查的函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336471.html
上一篇:答案輸出空白
