从文件中读取数字(整数)并将其存储为二维数组

时间:2012-08-26 10:56:51

标签: c matlab file-io multidimensional-array

我有一个文件(.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-d数组分配内存:

#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条目输入我的变量'array'。

P.S。 “homer_matrix.txt”是使用matlab通过以下命令生成的:

CODE:

A=imread('homer.jpg');

I=rgb2gray(A);

dlmwrite('homer_matrix.txt',I);

此代码将生成文件'homer_matrix.txt',其中包含768 X 1024条目表格中图像的灰度值。

4 个答案:

答案 0 :(得分:2)

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

此处的array声明无效。

答案 1 :(得分:1)

homer = fopen("homer_matrix.dat","w");

用标志“w”打开文本文件进行阅读并不是一个好主意。尝试使用“rt”代替。

答案 2 :(得分:1)

以下代码适合您。 它将精确计算文本文件中的行数和列数。

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);

答案 3 :(得分:0)

您忘记为阵列分配内存

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

这应该是

#define MAXCOLS 1000
#define MAXROWS 1000
int i = 0,j = 0,array[MAXROWS][MAXCOLS];