gpt4 book ai didi

c - 读入文件以创建多个 "minesweeper"ish 数组

转载 作者:行者123 更新时间:2023-11-30 17:56:48 26 4
gpt4 key购买 nike

到目前为止,我得到的是一个 .in 文件,它将创建 100 个数组,后面是棋盘上有多少个“地雷”,然后每个“地雷”有 2 个数字,代表它们将被放置在数组上的位置。这是针对我的初学者 C 类(class)的,老实说,我们还没有正确地教授过如此高级的东西(我轻率地使用这个术语说高级)。我知道如何读取文件,并且知道如何创建数组,但我不确定如何读取这么多行,一遍又一遍地从地雷切换到放置。我还发现自己很困惑如何根据地雷的放置位置将数组编号从 0 更改为另一个数字。

输入文件示例:

1
4
1 3
7 5
7 3
3 3

第一行中的 1 表示我们有一 block 板。下一行的 4 表示它将有 4 个炸弹。以下 4 行将炸弹在数组中的位置描述为行列

任何人都可以向我提供任何东西来指引我正确的方向吗?

最佳答案

下面是一个部分解决方案,它留下了一些部分作为OP的练习。

#include <stdio.h>
#include <stdlib.h>

#define BOARD_SIZE 8

int main(void) {

FILE *fp;

fp = fopen("mines.in","r");
if ( fp == NULL ) {
fprintf(stderr,"Could not open file\n");
return 1;
}

int nBoards = 0;
int nMines = 0;
int col;
int row;

int currentBoard = 0;

/* We know the first row is going to be the number of boards */
fscanf(fp,"%d",&nBoards);

printf("We have %d boards\n",nBoards);

while ( fscanf(fp,"%d",&nMines) > 0 ) {
int i,j;
/* initialize board as all zeros */
int board[BOARD_SIZE][BOARD_SIZE] = { {0} };

currentBoard++;
printf("Board %d:\n",currentBoard);

/* Read in and set the mines */
for (i=0; i<nMines; i++) {
fscanf(fp,"%d %d",&col,&row);
board[col-1][row-1] = 9;
}

/* Add mine proximity */
for (i=0; i<BOARD_SIZE; i++) {
for (j=0; j<BOARD_SIZE; j++) {
if ( board[i][j] == 9 ) { /* we have a mine */
/* Square to the left */
if (j > 0 && board[i][j-1] != 9) {
board[i][j-1]++;
}
/* Square to the right */
/* Left as exercise for the OP*/

/* Square above */
/* Left as exercise for the OP*/

/* Square below */
/* Left as exercise for the OP*/
}
}

/* Print out the board */
for (i=0; i<BOARD_SIZE; i++) {
for (j=0; j<BOARD_SIZE; j++) {
printf("%d ",board[i][j]);
}
printf("\n");
}
printf("\n");
}
fclose(fp);

if (currentBoard != nBoards) {
fprintf(stderr,"Expected %d boards, read in %d boards\n",nBoards,currentBoard);
return 1;
}

return 0;
}

代码读取第一行来记录木板的数量,然后循环遍历包含地雷数量和地雷位置的数据 block 。 while 循环将对包含地雷数量的行执行 fscanf,并且在 while 循环的主体中,不同的地雷位置将被读入定义的数字中对于董事会。

一旦我们有了所有的地雷位置,我们就可以计算棋盘上其他方格中的数字,我只在代码中显示了其中一个(其他类似)。

请注意,上面的代码几乎没有错误处理,也几乎没有对输入文件进行验证 - 如果输入文件错误,您可能会收到错误,即对数组的“超出范围”访问。我省略了这样的检查,以使程序的底层逻辑更清晰。

还要注意,我假设输入索引是“1”索引的(即在 [1,8] 范围内,而不是 C 期望的“0”索引(即在 [0,7] 范围内) ),因此在 board[col-1][row-1] = 9; 行中替换 1。

关于c - 读入文件以创建多个 "minesweeper"ish 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13236191/

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