テキストの読み込みとmalloc()についてです
こんにちは。
二つのベクトルの次元と要素をテキストファイルから読み取ってそのベクトルの和を出したいのですがうまくいきません。
#include <stdio.h>
#include <stdlib.h>
double vector_sum(double *x, double *y, int n){
int i;
double z[256]={0};
for(i=0;i<n;i++){
z[i] = x[i] + y[i] ;
}
return *z;
} //ベクトル和を出す関数(のつもり)//
int main(void){
int i,j,e;
double *a,*b,c[256][256]; //a,bはベクトル//
FILE *fp;
char fname[64];
char str[256];
double z[256];
printf("二つのベクトルが書き込まれているファイル名を入力してください.");
scanf("%s",fname);
fp = fopen(fname,"r");
if(fp==NULL){
printf("そのようなファイルを見つけることができません。");
}
while (fgets(str, 256, fp) >= 0) {
i++;
fgets(str, 256, fp);
printf("%s",str); //テキストの読み取り//
if(fgets(str,256,fp)==NULL) break; //読み取り終了時の動作//
sscanf(str,"%lf", &c[i]);//c[i][0]は要素数、c[i][1以上]はベクトルの中身を指すことにする。//
printf("%lf%lf%lf%lf%lf%lf%lf%lf\n",c[0][0],c[0][1],c[1][2]);
if(sscanf(str,"%lf", &c[i])<1){
printf("Format error");
}
}
if(c[0][0]!=c[1][0]){
printf("要素数が違います。");
}
a = malloc(sizeof(double) * c[0][0]);
b = malloc(sizeof(double) * c[1][0]);
if(a==NULL||b==NULL){
printf("記憶領域の確保に失敗しました。");
}
e = c[0][0]; //要素数//
for(i=0;i<=e-1;i++){
a[i]=c[0][i+1]; //ベクトルの中身のみをa,bに代入する。//
b[i]=c[1][i+i];
}
*z= vector_sum(a,b,e);
printf("ベクトル和は{");
for(i=0;i<=e-1;i++){
printf("%lf,",z[i]);
}
printf("}です。");
return 0;
}
テキストファイルは下のものを使いました。(ファイル名はvector.txt)
element: 7 { 4, 4 ,4 ,4 ,4 ,4 ,4 }
element: 7 { 8, 8, 8, 8, 8, 8, 8 }
結果は
「二つのベクトル名が書き込まれているファイルを入力してください。(vector.txtを入力)
element: 7 { 8, 8, 8, 8, 8, 8, 8 } 要素数が違います。記憶領域の確保に失敗しました。ベクトル和は{}です。」
と表示されてしまい、困っています。
初歩的なミスかもしれず恐縮ですがよろしければ回答お願いします。
お礼
変数eが指している、というところが大事なんですね。ありがとうございました。