2017-10-17 33 views
1

数字といくつかの文字の行列であるinput1.txtというファイルがあります。各チャーターが1つのセルになるように2D配列に読み込んで保存しようとしています。ファイルを2次元配列に読み込む

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 
[email protected] 

は、それは読んでいないようです1行目ですが、インデックスの点では私はそれがOKだと思います。私はC.に新しいです。誰か助けてもらえますか?事前におねがいします。

+1

あなたの 'numOfLines'は誤った名前で、最初の行の文字数を数えます。したがって、それらを読む!読書を続けると、最初からやり直すのはなぜだと思いますか?マジック? ['rewind()'](https://linux.die.net/man/3/rewind)を試してください。 –

+1

'numOfLines()'関数はファイルを最後まで読み込みます。再読み込みをしたい場合は、先頭に戻る必要があります(これは通常のファイルでは可能ですが、その他の種類のストリームではありません)。 –

+1

@JohnBollinger **このコードの混乱を招く**最後には読まない** –

答えて

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はファイルの各行の最後にありますが、2次元配列に格納したくない場合でも読み込む必要があります。

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 
} 
+0

私の間違いを見るのを助けてくれてありがとう:)、それはあなたにとても親切です。 –

+1

@HabilGanbarliようこそ。明確な質問のために、あなたはいつもここでいつも迅速かつ明確な答えを得る。 –

関連する問題