我正在尝试逐代更新2d数组。 为此,我需要接受两个参数:世代号和包含2d数组的初始输入txt。 但是无论我写什么,我的代码中总是存在分段错误。
我正在尝试从输入文件中读取2d数组。 该文件应类似于以下内容: 1 1 1 0 0 0 0 0 0 0 ......
int main(int argc, char *argv[]) {
// take arguments//
char* generation;
char* filename;
if (argc < 2)
{
printf("Error\n");
exit(1);
}
else{
generation = argv[1];
filename = argv[2];
}
// read file as a 5*5 matrix//
FILE *file;
file = fopen (filename,"r");
//5*5 matrix//
int gen = atoi(generation);
int cell[5][5];
int i=0;
int j=0;
for (i=0;i<5;i++){
for (j=0;j<5;j++){
fscanf (file, "%d",&cell[i][j]);
}
}
fclose(file);
非常感谢您!
答案 0 :(得分:1)
在您的代码中,您没有使用变量generation
,但我想应该将其用于存储矩阵维。如果总共是这种情况,则您正在读取3个参数,因此argc
应该为3。
如果您正在读取格式如下的文件:
1 2 3 4 5
6 7 8 9 10
1 1 3 4 5
6 7 8 9 0
在控制台传递的参数为:./a.out dimension matrix
。以下是一个简单但不安全的代码(它不检查用户输入的尺寸):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
char *filename;
char *generation;
if (argc < 3)
{
printf("Error\n");
exit(1);
}
else {
generation = argv[1];
filename = argv[2];
fp = fopen(filename, "r");
if (fp == NULL) {
fprintf(stderr, "Error: Cannot open file %s for reading\n", filename);
exit(1);
}
}
int dim = atoi(generation);
int i, j, cell[dim][dim];
for (i = 0; i < dim; i++) {
for (j = 0; j < dim; j++) {
if (fscanf(fp, "%d ", &cell[i][j]) != 1) {
fprintf(stderr, "invalid input for cell[%d][%d]\n", i, j);
fclose(fp);
exit(1);
}
}
}
fclose(fp);
/*Print the matrix */
for (i = 0; i < dim ; i++)
{
for (j = 0; j < dim ; j++)
{
printf("%d ", cell[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}