fscanfによる読み込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Deco20

fscanfによる読み込み

#1

投稿記事 by Deco20 » 12年前

はじめて投稿させていただきます。
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]);
	}


}

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: fscanfによる読み込み

#2

投稿記事 by beatle » 12年前

ファイルには本当に30万個以上の数値が記録されているのでしょうか。
途中から、とは、具体的に何個目から失敗するのでしょうか。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: fscanfによる読み込み

#3

投稿記事 by みけCAT » 12年前

とりあえず、
・オープンしたファイルはきちんとfcloseするべきだと思います。
・fopenが失敗したあと、そのまま(メッセージ表示のみで)次の処理に行くのはまずいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
tk-xleader
記事: 158
登録日時: 13年前
連絡を取る:

Re: fscanfによる読み込み

#4

投稿記事 by tk-xleader » 12年前

テキストデータがどうなっているかを見ないと、何が起こっているかがわからないので、アップしてもらえると、いい回答がもらえると思います。

box
記事: 2002
登録日時: 13年前

Re: fscanfによる読み込み

#5

投稿記事 by box » 12年前

何というか、コードがノッペリして見えます。
適宜改行を入れたり、インデントを明確にするなどして、
メリハリのあるコードにすると、間違いが見つけやすくなるかもしれません。

コード:

#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]);
    }
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Deco20

Re: fscanfによる読み込み

#6

投稿記事 by Deco20 » 12年前

返信ありがとうございます。
beatle さんが書きました:ファイルには本当に30万個以上の数値が記録されているのでしょうか。
途中から、とは、具体的に何個目から失敗するのでしょうか。
ファイルには30万個のデータが記録されていると思います。
読み込みの失敗については27261個目からでした。
tkmakwins15 さんが書きました:テキストデータがどうなっているかを見ないと、何が起こっているかがわからないので、アップしてもらえると、いい回答がもらえると思います。
テキストデータのアップについてですが、今回初めての投稿でヘルプページ(http://dixq.net/forum/abbcode_page.php?mode=help)を見てもアップの方法がわかりませんでした。
申し訳ないのですが、アップの方法をおしえていただけないでしょうか。

アバター
tk-xleader
記事: 158
登録日時: 13年前
連絡を取る:

Re: fscanfによる読み込み

#7

投稿記事 by tk-xleader » 12年前

Deco20 さんが書きました:テキストデータのアップについてですが、今回初めての投稿でヘルプページ(abbcode_page.php?mode=help)を見てもアップの方法がわかりませんでした。
申し訳ないのですが、アップの方法をおしえていただけないでしょうか。
そういえば、ユーザー登録しないと、ファイルのアップは不可能でしたっけ。
だとすると、下のアップローダーでファイルをアップロードして、ダウンロード用URLを貼り付けてください。

http://kie.nu/

Deco20

Re: fscanfによる読み込み

#8

投稿記事 by Deco20 » 12年前

tkmakwins15さん
教えていただきありがとうございます。
http://kie.nu/74d
にアップしました。

アバター
tk-xleader
記事: 158
登録日時: 13年前
連絡を取る:

Re: fscanfによる読み込み

#9

投稿記事 by tk-xleader » 12年前

27260行目に、エラーっぽい値が見つかりましたよ。これが原因じゃないですかね?

Deco20

Re: fscanfによる読み込み

#10

投稿記事 by Deco20 » 12年前

tkmakwins15 さんが書きました:27260行目に、エラーっぽい値が見つかりましたよ。これが原因じゃないですかね?
確認してみたら確かにエラーのような値がありました。おそらく、これが原因だと思います。
しかし、どうして27261行目以降のデータの読み込みがうまくいかないのでしょうか。

nil
記事: 428
登録日時: 12年前

Re: fscanfによる読み込み

#11

投稿記事 by nil » 12年前

たしかfscanfでデータを読み取れなかった場合、
次にfscanfが呼ばれた時も同じ部分を読み込もうとします。

なので27261行目を延々と読み込もうとし続けるはずです。
当然読み込めないですから27261行目から先は正常に読み取れないです

Deco20

Re: fscanfによる読み込み

#12

投稿記事 by Deco20 » 12年前

問題は解決しました。
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る