将非偶数行的文本文件读入2D数组

5

抱歉,我对C语言非常陌生,正在遇到困难。我有一个输入文本文件,读取如下:

5 3
383 386 287
415 293 335
368 492 149
421 362 27
190 59 263

我正在尝试将它读入一个二维数组中。我的尝试如下:

FILE * fin = NULL;
fin = fopen("myTestData.txt", "r");
int twod[MAX_ROWS][MAX_COLS];

int i, j, num, row, col;
fscanf(fin, "%d%d", &row, &col);

fclose(fin);

fin = fopen("myTestData.txt", "r");
for(i = 0; i < row; i++)
{
    for(j = 0; j < col; j++)
    {
        fscanf(fin, "%i ", &num);
    twod[i][j] = num;
    }
}

我遇到的问题是在第一行空白处 (twod [0] [2]) 被赋值为第二行的第一个整数 (383)。我该怎么做让 [0] [2] 获得空值?
感谢您的任何帮助。

1
您可以逐行读取输入,并将其标记化为数字。如果数字较少,则将虚拟值分配给剩余元素。 - AbdullahC
1
顺便说一下,第一行似乎指定了输入数据的行数和列数。这就是你的代码使用它的方式(请看rowcol如何被赋值)。因此,在你的for循环中只需要从第二行开始读取即可。在C语言中,整数类型没有null值。 - AbdullahC
2个回答

1
在读取行数和列数后,删除关闭和重新打开文件的行。你只需要处理剩余的数据,这些数据将被良好地结构化 - 就像大多数作业问题一样。
FILE * fin = NULL;
fin = fopen("myTestData.txt", "r");
int twod[MAX_ROWS][MAX_COLS];

int i, j, num, row, col;
fscanf(fin, "%d%d", &row, &col);

//fclose(fin);

//fin = fopen("myTestData.txt", "r");
for(i = 0; i < row; i++)
{
    for(j = 0; j < col; j++)
    {
        fscanf(fin, "%i ", &num);
        twod[i][j] = num;
    }
}

for (i = 0; i < row; i++)
{
    for (j = 0; j < col; j++)
        printf("%d ", twod[i][j]);
    printf("\n");
}

1
    #include <stdio.h>
    #include <stdlib.h>

    #define NUM_MAX_SIZE 20

    int** get2DArray( int rows, int columns )
    {
        int index = 0, **array = (int**)calloc( rows, sizeof( int* ) );

        for( ; index < rows ; index++ )
        {
            array[ index ] = (int*)calloc( columns, sizeof( int ) );
        }

        return array;
    }


    void print2DArray( int** matrix, int rows, int columns )
    {   
        int x = 0, y = 0;
        for( ; x < rows ; x++)
        {
            for( y = 0 ; y < columns ; y++)
            {
                printf( "%d\t", matrix[x][y] );
            }
            puts("");
        }
    }

    void freeMatrix( int** matrix, int rows )
    {
        rows--;
        for( ; rows > -1 ; rows-- )
        {
            free( matrix[ rows ] );
        }

        free( matrix );
    }

    int main()
    {
        FILE* file = fopen( "input.txt", "r" );

        int rows, columns;

        fscanf( file, "%d", &rows );
        fscanf( file, "%d", &columns );

        int x = 0, y = 0, num , **matrix = get2DArray( rows, columns );

        for( ; x < rows ; x++)
        {
            for( y = 0 ; y < columns ; y++)
            {
                fscanf( file, "%d", &matrix[ x ][ y ] );
            }
        }

        print2DArray( matrix, rows, columns );
        freeMatrix( matrix, rows );

        fclose( file );
        return 0;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接