0

我到处寻找,我无法完全弄清楚这一点。你如何读入 C 一个已经给定维度的矩阵?矩阵位于这样布局的 .dat 文件中。

2 4

1 2 3 4

9 8 7 6

显然 2 对应于行,4 对应于列,但我不知道如何应用它。我只需要找到一种方法将这个 dat 文件放入我的程序中,所以假设我只需要读取和打印它们(我已经想出了如何进行矩阵乘法部分)

4

2 回答 2

0

由于给出了矩阵维度并假设您拥有数据文件 data.dat。

#include <stdio.h>
#include <stdlib.h>


int main()
{ 
FILE* file=fopen("data.dat","r");
int x,y;
fscanf(file,"%d %d",&x,&y);
//Read the matrix dimensions
int **A=(int**)malloc(sizeof(int*)*x);
for(int i=0;i<x;i++)
{
 for(int j=0;j<y;j++)
 { 
   A[i]=(int*)malloc(sizeof(int)*y);
 }
}
//allocate the memory
for(int i=0;i<x;i++)
 { 
 for(int j=0;j<y;j++)
 {
   fscanf(file,"%d",&A[i][j]); 
 } 
}
//read the integers skipping whitespaces
for(int i=0;i<x;i++)
{
        free(A[i]);
}
//free the memory we allocated
free(A);
fclose(file)
//close files
return 0; 
}

fscanf 首先读取作为维度的前 2 个字符,然后 malloc 动态数组。fscanf 然后扫描所有其他整数,跳过所有空格。在我们释放我们动态分配的内存并关闭文件之后。

使用标志 -std=c99 编译。

于 2013-02-22T03:33:49.307 回答
0

像这样的东西:你需要这个标题

#include <stdio.h>

这是 main.cpp 代码——但我不确定 fscanf 函数——但它的工作方式与通常的 scanf 完全一样。所以:

FILE *f;
int ch[8];
f=fopen("a.dat","r"); 
for (int i=0;i<2;i++){
for (int j=0;j<2;j++){
fscanf(ch[i][j]);
}
}
fclose(f);
于 2013-02-22T03:36:42.927 回答