ページ 1 / 1
fscanfによる読み込み
Posted: 2012年4月01日(日) 20:53
by Deco20
はじめて投稿させていただきます。
fscanfで実数型(double)のデータ(個数は30万個)を読み込み配列に格納しようしているのですが、
途中から読み込みが失敗し、配列に-6277438562204192500000000000000000000000000000000000000000000000000.000000
という数値が格納されてしまいます。
どうして、このようなことが起こるのでしょうか。また、正しく読み込みを行うためにはどうすればよいでしょうか。
ご教授ください。
コード:
#include<stdio.h>
#include<stdlib.h>
main(){
double *A,*B;
int i;
int n;
int pp;
FILE *fp3,*fp4;
n=30;
pp=10000;
A=(double *)malloc(sizeof(double)*(n*pp));
B=(double *)malloc(sizeof(double)*(n*pp));
fp3=fopen("A.txt","r");
fp4=fopen("B.txt","r");
if(fp3==NULL){
printf("失敗\n");
}
if(fp4==NULL){
printf("失敗\n");
}
for(i=1;i<=(n*pp);i++){
fscanf(fp3,"%lf",&A[i-1]);
fscanf(fp4,"%lf",&B[i-1]);
printf("%f\n",A[i-1]);
}
}
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 21:00
by beatle
ファイルには本当に30万個以上の数値が記録されているのでしょうか。
途中から、とは、具体的に何個目から失敗するのでしょうか。
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 21:04
by みけCAT
とりあえず、
・オープンしたファイルはきちんとfcloseするべきだと思います。
・fopenが失敗したあと、そのまま(メッセージ表示のみで)次の処理に行くのはまずいと思います。
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 21:10
by tk-xleader
テキストデータがどうなっているかを見ないと、何が起こっているかがわからないので、アップしてもらえると、いい回答がもらえると思います。
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 21:15
by box
何というか、コードがノッペリして見えます。
適宜改行を入れたり、インデントを明確にするなどして、
メリハリのあるコードにすると、間違いが見つけやすくなるかもしれません。
コード:
#include<stdio.h>
#include<stdlib.h>
main(){
double *A,*B;
int i;
int n;
int pp;
FILE *fp3,*fp4;
n=30;
pp=10000;
A=(double *)malloc(sizeof(double)*(n*pp));
B=(double *)malloc(sizeof(double)*(n*pp));
fp3=fopen("A.txt","r");
fp4=fopen("B.txt","r");
if(fp3==NULL){
printf("失敗\n");
}
if(fp4==NULL){
printf("失敗\n");
}
for(i=1;i<=(n*pp);i++){
fscanf(fp3,"%lf",&A[i-1]);
fscanf(fp4,"%lf",&B[i-1]);
printf("%f\n",A[i-1]);
}
}
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 21:38
by Deco20
返信ありがとうございます。
beatle さんが書きました:ファイルには本当に30万個以上の数値が記録されているのでしょうか。
途中から、とは、具体的に何個目から失敗するのでしょうか。
ファイルには30万個のデータが記録されていると思います。
読み込みの失敗については27261個目からでした。
tkmakwins15 さんが書きました:テキストデータがどうなっているかを見ないと、何が起こっているかがわからないので、アップしてもらえると、いい回答がもらえると思います。
テキストデータのアップについてですが、今回初めての投稿でヘルプページ(
http://dixq.net/forum/abbcode_page.php?mode=help)を見てもアップの方法がわかりませんでした。
申し訳ないのですが、アップの方法をおしえていただけないでしょうか。
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 22:05
by tk-xleader
Deco20 さんが書きました:テキストデータのアップについてですが、今回初めての投稿でヘルプページ(abbcode_page.php?mode=help)を見てもアップの方法がわかりませんでした。
申し訳ないのですが、アップの方法をおしえていただけないでしょうか。
そういえば、ユーザー登録しないと、ファイルのアップは不可能でしたっけ。
だとすると、下のアップローダーでファイルをアップロードして、ダウンロード用URLを貼り付けてください。
http://kie.nu/
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 22:12
by Deco20
tkmakwins15さん
教えていただきありがとうございます。
http://kie.nu/74d
にアップしました。
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 22:16
by tk-xleader
27260行目に、エラーっぽい値が見つかりましたよ。これが原因じゃないですかね?
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 22:24
by Deco20
tkmakwins15 さんが書きました:27260行目に、エラーっぽい値が見つかりましたよ。これが原因じゃないですかね?
確認してみたら確かにエラーのような値がありました。おそらく、これが原因だと思います。
しかし、どうして27261行目以降のデータの読み込みがうまくいかないのでしょうか。
Re: fscanfによる読み込み
Posted: 2012年4月01日(日) 22:37
by nil
たしかfscanfでデータを読み取れなかった場合、
次にfscanfが呼ばれた時も同じ部分を読み込もうとします。
なので27261行目を延々と読み込もうとし続けるはずです。
当然読み込めないですから27261行目から先は正常に読み取れないです
Re: fscanfによる読み込み
Posted: 2012年4月02日(月) 08:29
by Deco20
問題は解決しました。
ありがとうございました