我到处寻找,我无法完全弄清楚这一点。你如何读入 C 一个已经给定维度的矩阵?矩阵位于这样布局的 .dat 文件中。
2 4
1 2 3 4
9 8 7 6
显然 2 对应于行,4 对应于列,但我不知道如何应用它。我只需要找到一种方法将这个 dat 文件放入我的程序中,所以假设我只需要读取和打印它们(我已经想出了如何进行矩阵乘法部分)
我到处寻找,我无法完全弄清楚这一点。你如何读入 C 一个已经给定维度的矩阵?矩阵位于这样布局的 .dat 文件中。
2 4
1 2 3 4
9 8 7 6
显然 2 对应于行,4 对应于列,但我不知道如何应用它。我只需要找到一种方法将这个 dat 文件放入我的程序中,所以假设我只需要读取和打印它们(我已经想出了如何进行矩阵乘法部分)
由于给出了矩阵维度并假设您拥有数据文件 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 编译。
像这样的东西:你需要这个标题
#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);