读取具有5行的文本文件,以填充到C中的2D数组中

时间:2015-03-01 22:51:36

标签: c arrays file text 2d

我在阅读文本文件时遇到问题,使用该信息形成一个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)打印出来。

我该怎么做呢?

感谢您的阅读。

2 个答案:

答案 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++;
}

前面的答案

中提到的阵列也存在问题