gpt4 book ai didi

c - 从C中的文件读入二维数组

转载 作者:行者123 更新时间:2023-11-30 19:36:19 27 4
gpt4 key购买 nike

我正在开发一个自定义尺寸的 Tic Tac Toe 游戏。我想制作一个保存文件,这样如果用户在游戏结束前离开游戏,他可以再次加载上一个游戏继续。

我对一个单元格和一个结构体使用了枚举。

typedef enum Cell {                                    
c_empty, c_circle, c_cross
} Cell;

typedef struct Game {
Cell** board;
int SIZE;
} Game;


Game gboard;
static void file_write(Game* pgboard);
static void file_read(Game* pgboard);
<小时/>

读取 SIZE 已经可以使用此方法:

fscanf(fp, "%d", &pgboard->SIZE);

并将其写入文件:

fprintf(fp, "%d\n", pgboard->SIZE);

还将板写入文件可与 switch 一起使用:

for (j = 0; j < pgboard->SIZE; ++j){
for (i = 0; i < pgboard->SIZE; ++i){
switch (pgboard->board[j][i]) {
case c_empty: fprintf(fp, " "); break;
case c_circle: fprintf(fp, "o"); break;
case c_cross: fprintf(fp, "x"); break;
}

所以我的文件现在是这样的:

  13
x o x

您对我如何读回黑板有什么建议吗?

最佳答案

虽然更好的方法是以数字格式而不是字符串读取/写入数据,但无论如何,这里的代码可以完成您想要的操作。

char cell;

fscanf(fp, "%d", &pgboard->SIZE);
fscanf(fp, "%c", &cell); /* to get rid of new line */

for (j = 0; j < pgboard->SIZE; ++j){
for (i = 0; i < pgboard->SIZE; ++i){
fscanf(fp, "%c", &cell)
switch (cell) {
case ' ': pgboard->board[j][i] = c_empty; break;
case 'o': pgboard->board[j][i] = c_circle; break;
case 'x': pgboard->board[j][i] = c_cross; break;
}
}
}

我没有测试代码,但它会显示这个想法的要点。

关于c - 从C中的文件读入二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41036349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com