C 读取文件以创建多个“文件”;“扫雷舰”;ish阵列

C 读取文件以创建多个“文件”;“扫雷舰”;ish阵列,c,C,到目前为止,我得到的是一个.in文件,它将创建100个数组,然后是板上有多少个“地雷”,然后每个“地雷”有2个数字,表示它们将放置在数组中的位置。这是我的初级C课程,老实说,我们还没有被正确地教过这么高级的东西(我说高级是轻描淡写地使用这个术语)。我知道如何读入文件,我知道如何创建数组,但我不确定如何读入这么多行,一遍又一遍地从地雷切换到放置位置。我还发现自己对如何根据地雷的放置位置将阵列号从0更改为另一个数字感到困惑 输入文件示例: 1 4 1 3 7 5 7 3 3 3 其中第一行中的1表

到目前为止,我得到的是一个.in文件,它将创建100个数组,然后是板上有多少个“地雷”,然后每个“地雷”有2个数字,表示它们将放置在数组中的位置。这是我的初级C课程,老实说,我们还没有被正确地教过这么高级的东西(我说高级是轻描淡写地使用这个术语)。我知道如何读入文件,我知道如何创建数组,但我不确定如何读入这么多行,一遍又一遍地从地雷切换到放置位置。我还发现自己对如何根据地雷的放置位置将阵列号从0更改为另一个数字感到困惑

输入文件示例:

1
4
1 3
7 5
7 3
3 3
其中第一行中的
1
表示我们有一块板。下一行的
4
表示它将有4枚炸弹。以下4行将炸弹在阵列中的位置描述为
行-列


有没有人能为我提供一些正确的方向?

下面是一个部分解决方案,只剩下几个部分作为操作练习

#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;
}
#包括
#包括
#定义电路板尺寸8
内部主(空){
文件*fp;
fp=fopen(“矿山”在“r”);
如果(fp==NULL){
fprintf(stderr,“无法打开文件”\n);
返回1;
}
int nBoards=0;
int nMines=0;
int col;
int行;
int currentBoard=0;
/*我们知道第一排是板的数量*/
fscanf(fp、%d、&nBoards);
printf(“我们有%d块板”,n块板);
而(fscanf(fp、%d、&nMines)>0){
int i,j;
/*将电路板初始化为全零*/
int线路板[board_SIZE][board_SIZE]={{0};
电流板++;
printf(“板%d:\n”,当前板);
/*读入并设置地雷*/

对于(i=0;我能告诉你到目前为止你都做了些什么吗?除了你做了些什么之外,你能描述一下你被教了些什么吗?你被教过
for
while
循环吗?你被教过哪些输入函数?还有,试着对你正在尝试做的事情更具体一点;你能给我举一个你想要做的文件的例子吗你是想读入,还是其中的摘录?哦,是的,我想一些基本信息会有所帮助。我已经学习了/while/和do-while循环,if语句。不知道输入函数是什么意思,所以我猜没有。我基本上需要一个8x8的数组来打印9,无论地雷放在哪里,它周围的数字都会改变,a为旁边的每一个矿添加1。我不知道如何使用换行符在板上打印样本输入和输出。很抱歉,第一次在这些上看起来像个白痴boards@ChrisMiranda你能提供一个输入文件形式的例子吗?如果不知道这个例子,你只能从文本描述中猜测输入n、 这使得你很难提供任何有用的帮助。我理解你在阅读完文件后想做什么,但目前还不清楚文件是什么样子。