floatタイプで、fprintfした後fscanfすれど、、、

[戻る]
びすけん 2004/07/06(火) 01:30:27
VC++6で使っています。あるファイルに、幾つもの位が不定なfloat
(不動少数点)タイプの変数をfprintfで書かせて、いったんファイルを閉じ、その後、
また、fopenして、引き続き、fscanfを繰り返して、最初に、ファイルに書かせたものが
読めるかどうかチェックしてみたのですが、最初は、順番に読めて来るのですが、その
うち、数値そのものはずれてはいないようなのですが、位が飛んだりして、おかしくな
っていくのです。fprintfした後は、次のfprintfするまでに、改行等を入れないといけ
ないのでしょうか?

wood 2004/07/06(火) 06:52:34
fprintfの書き方に注目してみてください
テキスト可変変換・してませんか
またfscanfは可変読み対応してますか

両方の記述 行を提示してください

改行を入れても問題解決にはなりません

------------------------------------------------------------------------------

変数イメージでのデータ保存したいのであれば、構造体を使ったfwriteをお勧めします

struct aaa [
  float   d_f;
  double  d_d:
 }


struct aaa bbb;

bbb.d_f=1000.001;
bbb.d_d=10.00000021;

fwrite(bbb,sizeof(aaa),1,FILE *);

bbb.d_f=10.001;
bbb.d_d=10000.00000021;

fwrite(bbb,sizeof(aaa),1,FILE *);


少数位取りが違っていでも データ型のバイト数で書き込まれるので
freadしてもずれは発生しないはずです

どうしても、fprintfにこだわらなければいけないのであれば、テキストに変換
されてしまうことを念頭に置き考慮したプログラミングを考えましょう

wood 2004/07/06(火) 06:56:15
追伸
書き込んだデータはノートパッドで開くと、普通に文字(数字)として見れるでしょう
私の例で書くと、文字(数字)として見れ見れないはずで、またファイルサイズも
小さくなると思います

PATIO 2004/07/06(火) 10:10:53
とにかく、あなたのコードを提示してください。
話だけでは説明し切れていないところがあると思います。
そういう場合は、そのものずばりコードを提示した方が早道です。

細かい話はコードの提示があってからかな。

古いスレッドには追加発言できません。