我有一个名为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的新手。可以请任何人帮忙。谢谢。
答案 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
}