C读取文件到2D数组

时间:2017-10-17 14:57:35

标签: c arrays multidimensional-array file-io

我有一个名为input1.txt的文件,它是一个数字和一些字母的矩阵。我正在尝试读取并将其存储在一个二维数组中,以便每个章程为1个单元格。这是我的文本文件:

1111S11110
0000010001
110100010d
t001111110
0100000001
0111111101
1111111101
00000D01T1
0111110001
0000E01110

这是我的代码:

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


// Function for finding the array length
int numOfLines(FILE *const mazeFile){
    int c, count;
    count = 0;
    for( ;; ){
        c = fgetc(mazeFile);
        if( c == EOF || c == '\n' )
            break;
        ++count;
    }
    return count;
}

// Main Function
int main( int argc, char **argv )
{
    // Opening the Matrix File
    FILE *mazeFile;
    mazeFile = fopen( "input1.txt", "r" );
    if( mazeFile == NULL )
        return 1;
    int matrixSize = numOfLines( mazeFile );

    // Reading text file into 2D array
    int i,j;
    char mazeArray [matrixSize][matrixSize];

    for(i=0;i<matrixSize;i++){
            for(j=0;j<matrixSize;j++){
                fscanf(mazeFile,"%c", &mazeArray[i][j]);
            }
    }

    for(i=0;i<matrixSize;i++){
        for(j=0;j<matrixSize;j++){
            printf("%c",mazeArray[i][j]);
        }
    }

    fclose( mazeFile );
    return 0;
}

然而,当我打印它时,我的控制台输出就像那样:

0000010001
110100010d
t001111110
0100000001
0111111101
1111111101
00000D01T1
0111110001
0000E01110@

似乎没有阅读第一行,但就索引而言,我认为没关系。我是C的新手。可以请任何人帮忙。谢谢。

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

numOfLines功能错误。这是更正后的版本;它实际上计算行数并将文件指针重置为文件的开头。

您的版本仅计算第一行中的字符数(恰好是10,因此值似乎正确),并且它没有将文件指针重置为文件的开头(因此第一行是输出中缺少。)

int numOfLines(FILE *mazeFile) {  // no const here BTW !!
  int c, count;
  count = 0;
  for (;; ) {
    c = fgetc(mazeFile);
    if (c == EOF)
      break;          // enf of file => we quit

    if (c == '\n')
      ++count;        // end of line => increment line counter
  }
  rewind(mazeFile);

  return count+1;
}

然后你忘了在每一行的末尾吸收\n字符。这个\n位于文件每行的末尾,但您需要阅读它,即使您不想将其存储在二维数组中。

  for (i = 0; i<matrixSize; i++) {
    for (j = 0; j<matrixSize; j++) {
      fscanf(mazeFile, "%c", &mazeArray[i][j]);
    }

    char eol;                         // dummy variable
    fscanf(mazeFile, "%c", &eol);     // read \n character
  }

最后,由于上述原因,您需要打印\n

for (i = 0; i<matrixSize; i++) {
  for (j = 0; j<matrixSize; j++) {
    printf("%c", mazeArray[i][j]);
  }

  putc('\n', stdout);                 // print \n
}