1

行と列の形式で数値 (整数) を含むファイル (.dat と .txt の両方の形式) があります。このファイルから数値 (整数) を読み取る必要があります。そのデータは 2D 配列に格納されます。この配列は私の C プログラムで定義されています。これを達成するために C でファイル処理を使用しようとしましたが、ファイル全体を読み取っていません。プログラムは、ファイル内のあるデータで突然停止し、プログラムを終了します。以下は、これに使用される私のCコードです:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define EOL '\n'

int main(){

int i = 0,j = 0,array[][];          //i is row and j is column variable, array is the     target 2d matrix 
FILE *homer;
int v;
homer = fopen("homer_matrix.dat","w");   //opening a file named "homer_matrix.dat"
for(i=0;;i++)
  {
   for(j=0;;j++)
    {
            while (fscanf(homer, "%d", &v) == 1)           //scanning for a readable  value in the file
            {
                if(v==EOL)                                      //if End of line occurs , increment the row variable
                   break;
                array[i][j] = v;                                 //saving the integer value in the 2d array defined
            }
        if(v==EOF)
           break;                                                //if end of file occurs , end the reading operation.
    }

  }
fclose(homer);                                                        //close the opened file

for(i=0;i<=1000;i++)
  {
     for(j=0;j<=1200;j++)
        printf(" %d",array[i][j]);                          //printing the values read in the matrix.

   printf("\n");
   }


 }

応答してくれてありがとう、しかし問題は別のものです..次のコードを使用して2次元配列にメモリを割り当てました:

#define ROW 512

#define CLMN 512


for(i = 0; i <  ROW; i++)

  {

    for(j = 0;  j < CLMN; j++)

        {

array[i][j] = 0;

        }

  }  

また、次のコードで権限を「r」に変更しました。

homer = fopen(" homer_matrix.txt" , "r"); 

それでも、2-D エントリを変数「配列」に入れることができません。

ps 「homer_matrix.txt」は、次のコマンドで matlab を使用して生成されます。

コード:

A=imread('homer.jpg');

I=rgb2gray(A);

dlmwrite('homer_matrix.txt',I);

このコードは、768 X 1024 の入力フォームで画像のグレースケール値を含むファイル「homer_matrix.txt」を生成します。

4

4 に答える 4

2
int i = 0,j = 0,array[][];

ここでのarray宣言は無効です。

于 2012-08-26T10:59:30.177 に答える
1

The following code will work for you. It will calculate exactly how many rows and columns you have in your text file.

do {  //calculating the no. of rows and columns in the text file
    c = getc (fp);

    if((temp != 2) && (c == ' ' || c == '\n'))
    {
        n++;
    }
    if(c == '\n')
    {
        temp =2;
        m++;
    }
} while (c != EOF);
fclose(fp);
于 2012-08-28T16:34:47.443 に答える
1
homer = fopen("homer_matrix.dat","w");

フラグ "w" を使用してテキスト ファイルを読み取り用に開くことはお勧めできません。代わりに「rt」を使用してみてください。

于 2012-08-26T11:04:07.680 に答える
0

配列にメモリを割り当てるのを忘れました

int i = 0,j = 0,array[][];

これは次のようなものでなければなりません

#define MAXCOLS 1000
#define MAXROWS 1000
int i = 0,j = 0,array[MAXROWS][MAXCOLS];
于 2012-08-26T11:02:04.283 に答える