我在阅读文本文件时遇到问题,使用该信息形成一个2D数组,该数组将打印成矩阵。
包含以下值的文本文件:
4
9 12 13 1
7 3 6 9
8 4 2 1
10 5 15 3
第一个整数(4)将用于确定2D数组的行和列,例如。
int row = 4;
int col = 4;
int matrix[row][col]; //will be a 4x4 matrix
如何使用代码的第一行(值:4)来获取数组的尺寸,然后将剩余的值存储到数组中?
我试图做这样的事情:
#define ARRAYSIZE 10000
char *matDimen;
char *tokenArray;
char buffer[ARRAYSIZE];
FILE *file = fopen("textfile.txt", "r");
while (fgets(buffer, sizeof buffer, file) != NULL)
{
if (row == 0) //Take the first value read to determine the dimension of the array
{
matDimen = strtok(buffer, " "); //Using strtok to read in the first value as a string
row = atol(matDimen); //Converting the string into an int
col = row; //Because rows and columns are going to be the same, initialize column to row
if (row < 1 || 10 < row)
{
if (col < 1 || 10 < row)
{
printf("Matrix must be within 2x2 and 9x9.\n");
exit(0);
}
}
}
for (i = 0; i < row; i++) //Ideally, assigns values from the text file into an index of the array
{
for (j = 0; j < col; j++)
{
tokenArray = strtok(NULL, " ");
//strcpy(matrix[i][j], tokenArray); Program crashes here
//printf("%s ", matrix[i][j]);
}
if (j == col) //Formats the matrix into a 4x4 square, in this scenario
{
printf("\n");
}
}
fclose(file);
我想要的是:
1)读取第一个值以确定2D阵列的尺寸
2)转到下一行
3)逐个读取下一个值并将它们存储到数组
中4)打印出来。
我该怎么做呢?
感谢您的阅读。
答案 0 :(得分:1)
数组基本上是指向一堆值的指针,因此请考虑类型为int的数组arr:
arr[0];
与
相同*arr;
并且
arr[2];
与
相同*(arr+2);
因此,如果你有一个int数组,你实际上有一个指向int类型指针的指针。使用malloc(),您可以使数组动态大小: (假设我们读取var的行数,称为&#39; rows&#39;)
int** arr = malloc(sizeof(int[4])*rows);
arr now是一个指向4个整数数组的指针,可以照常访问:
arr[row][col]
希望能为你清除它,Google&#34;动态二维阵列c&#34;欲了解更多信息:)
答案 1 :(得分:0)
你可以一次做一件事而不是一个循环
fgets(buf, sizeof buf, file);
if (!buf) printf("error 1...\n");
row = atoi( buf );
if ( row < 1 || row > 10 || col < 1 || col > 10 ) printf("error 2...\n");
int r = 0;
while (fgets(buf, sizeof buf, file) )
{
char *p = strtok( buf, " " );
for (int column = 0; column < row; column++)
{
if (!p) break;//error
matrix[r][column] = atoi(p);
p = strtok (NULL, " ");
}
r++;
}
前面的答案
中提到的阵列也存在问题