从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);
}
我正在尝试用 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);
}