1

我有一个文件(.dat 和 .txt 格式),其中包含行和列形式的数字(整数)。我需要从此文件中读取数字(整数)。该数据将存储在二维数组中。这个数组是在我的 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");
   }


 }

谢谢大家的回复,但问题是别的......使用以下代码为二维数组分配内存:

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

但是,我仍然无法将二维条目放入我的变量“数组”中。

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

代码:

A=imread('homer.jpg');

I=rgb2gray(A);

dlmwrite('homer_matrix.txt',I);

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

4

4 回答 4

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

这里的array声明无效。

于 2012-08-26T10:59:30.177 回答
1
homer = fopen("homer_matrix.dat","w");

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

于 2012-08-26T11:04:07.680 回答
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);
于 2012-08-28T16:34:47.443 回答
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 回答