从C中的文本文件中读取矩阵元素和相应的行和列索引

Read matrix element and respective row and column indexes from text file from text file in C

我正在尝试用 C 语言进行捕食者-猎物模拟,但我对 C 语言编程还很陌生。 我似乎无法按预期填写董事会。

我需要从作为程序标准输入的文本文件中读取模拟的输入参数。 输入文件有以下数据:

2 4 3 6 5 5 9

摇滚 0 0

兔子 0 2

福克斯 0 4

福克斯 1 0

福克斯 1 4

摇滚 2 4

兔子 3 0

兔子 4 0

福克斯 4 4

最初,我阅读了第一行,其中包含一组模拟所需的参数。 我可以很好地阅读这些内容,然后再使用这些值。

然后,我需要阅读以下 9 行,其中包含代表我的棋盘的对象以及矩阵中相应的 x 和 y 位置。 我应该得到这样的东西作为初始状态:

enter image description here

其中 * 代表岩石,R 代表兔子,F 代表狐狸。 这是我到目前为止所做的:

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

// Declare functions
void *fillMatrix(int nobj, int r, int c);
void printMatrix(char *_matrix, int r, int col);

int main(int argc, char *argv[]) {
    
    int GEN_PROC_RABBITS, // number of generations until a rabbit can procreate
    GEN_PROC_FOXES, //  number of generations until a fox can procreate
    GEN_FOOD_FOXES, // number of generations for a fox to die of starvation
    N_GEN, // total number of generations for the simulation
    ROWS,
    COLS,
    N; // inicial number of objects in the ecosystem

if (!scanf("%d %d %d %d %d %d %d", &GEN_PROC_RABBITS, &GEN_PROC_FOXES, &GEN_FOOD_FOXES, &N_GEN, &ROWS, &COLS, &N)) {
    fprintf(stderr, "Error while reading input.\nAborting...\n");
    exit(-1);
    }

char *matrix;
    matrix=fillMatrix(N,ROWS,COLS);
    printMatrix(matrix, ROWS, COLS);

void *fillMatrix(int nobj, int r, int c){
    char (*matrix)[c] = (char (*)[c]) malloc(r * c * sizeof(char));
    char *character[6];
    int m;
    for (m=0; m < nobj; m++) {
        scanf("%s %d %d", &character, &r, &c);
        printf("%s %d %d\n", character, r, c);
        matrix[r][c] = character[0];   
    }
    return (char *) matrix;
}

void printMatrix(char *_matrix, int r, int c){
    char (*matrix)[c] = (char (*)[c]) _matrix;
    int i, j;
    printf("Gen 0\n");
    printf ("--------\n");
    for(i=0; i < r; i++) {
        for (j=0; j < c-1; j++) {
            printf("%c ", matrix[i][j]);
        }
        printf("%c\n", matrix[i][j]);
    }
    printf ("--------\n");
    fflush(stdout);
}

我得到的是这样的:

enter image description here

此外,我仍然需要用“*”替换 ROCKS 中的 R,当我尝试这样做时,一切都变得更加混乱。 内存分配似乎有问题,或者我可能遗漏了其他东西。

有人可以帮我看看我做错了什么吗?非常感谢。此外,非常欢迎任何关于更好的方法的建议。

您可以尝试像这样声明您的矩阵:

void *fillMatrix(int nobj, int r, int c)
{
    char (*matrix)[r][c] = malloc(sizeof(*matrix));

    // Fill the whole matrix with empty space characters
    // When declared this way, 'matrix' must be dereferenced each time it's used
    memset(*matrix, ' ', sizeof(*matrix));

    char *character[6];
    int m;
    for (m=0; m < nobj; m++) {
        scanf("%s %d %d", &character, &r, &c);
        printf("%s %d %d\n", character, r, c);
        (*matrix)[r][c] = character[0]; //<== (*matrix)   
    }
    return (char *) matrix;
}

void printMatrix(char *_matrix, int r, int c)
{
    // Idem here
    char (*matrix)[r][c] = (char (*)[r][c]) _matrix;
    int i, j;
    printf("Gen 0\n");
    printf ("--------\n");
    for(i=0; i < r; i++) {
        for (j=0; j < c-1; j++) {
            printf("%c ", (*matrix)[i][j]); //<== (*matrix)
        }
        printf("%c\n", (*matrix)[i][j]); //<== (*matrix)
    }
    printf ("--------\n");
    fflush(stdout);
}
        printf ("--------\n");
        fflush(stdout);
    }