【问题标题】:Read numbers(integers) from a file and store it a 2-D array从文件中读取数字(整数)并将其存储为二维数组
【发布时间】:2012-08-21 04:55:39
【问题描述】:

我有一个文件(.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"); 

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

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

代码:

A=imread('homer.jpg');

I=rgb2gray(A);

dlmwrite('homer_matrix.txt',I);

此代码将生成文件“homer_matrix.txt”,其中包含 768 X 1024 输入表单中图像的灰度值。

【问题讨论】:

    标签: c matlab file-io multidimensional-array


    【解决方案1】:
    int i = 0,j = 0,array[][];
    

    这里的array 声明无效。

    【讨论】:

    • 谢谢,我刚刚用编辑后的代码编辑了我的问题,如果你能帮忙就太好了
    • @JimmyThakkar 你的数组array 现在是如何声明的?请显示您的数组的声明。
    • #define ROW 234 #define CLMN 327 int main(void) { int i = 0,j = 0,array[ROW][CLMN]; //i 是行,j 是列变量,数组是目标 2d //矩阵
    • @JimmyThakkar 在您的for 循环中设置限制:for(i=0;i&lt;ROW;i++)for(j=0;j&lt;CLMN;j++) 如果这没有帮助,我建议您打开一个新问题。
    【解决方案2】:

    你忘记为你的数组分配内存

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

    应该是这样的

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

    【讨论】:

      【解决方案3】:
      homer = fopen("homer_matrix.dat","w");
      

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

      【讨论】:

      • 修改了代码,如果有其他解决方法请查看,谢谢
      • 请在您的问题中添加几行文本文件或与 dropbox.com 或其他方式共享整个文件,我会尝试根据您的数据修复您的代码。顺便说一句,您确定导出和解析文本文件对您有好处吗?我认为最好在 matlab 中导出二进制文件,然后在 C 程序中将其读入内存。
      • 感谢您的帮助,我找到了解决方案。
      【解决方案4】:

      以下代码将为您工作。 它将准确计算您在文本文件中的行数和列数。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-16
        • 2014-08-14
        • 2013-08-22
        • 1970-01-01
        • 2023-01-19
        相关资源
        最近更新 更多