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 に答える