我正在尝试逐代更新2d数组。为了做到这一点,我需要两个参数:生成号和包含2d数组的初始输入txt。但无论我写什么,我的代码中总是存在分段错误。
我正在尝试从输入文件中读取一个2d数组。该文件应类似于以下内容:1 1 0 00 0 0 0……
int main(int argc, char *argv[]) {
// take arguments//
char* generation;
char* filename;
if (argc < 2)
{
printf("Errorn");
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);
非常感谢!!!
在您的代码中,您没有使用变量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("Errorn");
exit(1);
}
else {
generation = argv[1];
filename = argv[2];
fp = fopen(filename, "r");
if (fp == NULL) {
fprintf(stderr, "Error: Cannot open file %s for readingn", 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;
}