Как прочитать двухмерный массив из файла с помощью C? - PullRequest
2 голосов
/ 04 декабря 2010

Я пытался:

void read_grid_from_file( int** grid, const size_t row, const size_t column, FILE* inf ) {
    size_t x, y;
    for( x = 0; x < row; ++x ) {
        for( y = 0; y < column; ++y ) {
            fscanf( inf, "%d", &grid[x][y] );
            printf( "%d ", grid[x][y] );
        }
        printf( "\n" ); 
    }
}

int main( int argc, char *argv[] ) {
    FILE* inf; // input file stream
    FILE* outf; // output file stream
    char pbm_name[20]; 
    size_t row = 0;
    size_t column = 0;
    /*
    if( argc != 3 ) {
        prn_info( argv[0] );
        exit( 1 );
    }
    */
    inf = fopen( "infile.txt" , "r" );
    outf = fopen( "outfile.txt", "w" );
    fgets( pbm_name, 20, inf ); 
    fscanf( inf, "%d", &row );
    fscanf( inf, "%d", &column );
    int** grid = allocate_memory_for_grid( row, column );
    read_grid_from_file( grid, row, column, inf );
    show_grid( grid, row, column ); //for debugging
}

Входной файл:

P1
12 14
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 1 1 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1

Вывод:

1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 1 1 0 0 0 0 0 0
0 0 0 0 1 1 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 1 1 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 1 1 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1
Press any key to continue . . .

Откуда взялась эта матрица?

Ответы [ 4 ]

4 голосов
/ 04 декабря 2010

Полагаю, вы только что перевернули строку и столбец.В вашем входном файле 12 столбцов и 14 строк, тогда как в вашем коде вы читаете строки как столбцы, а столбцы как строки.

1 голос
/ 04 декабря 2010

Вы читаете row, а затем column.Должно быть наоборот , column, затем row.

0 голосов
/ 04 декабря 2010

Вы, кажется, читаете файл .pbm.Вы можете рассмотреть возможность использования библиотеки netpbm , если лицензия подходит для ваших целей.

0 голосов
/ 04 декабря 2010

Извините, ребята, думаю, я понял, строка и столбец из текстового файла были перевернуты !!

...