ページ 11

教えてください

Posted: 2008年2月27日(水) 14:53
by Gantetsu
初心者です。

double x,y,z;
char str1[10],str2[40]

として

NODE 1 0.0000 -120.0000 0.0000 000
NODE 5658 25.0000 120.0000 35.0000 000
(空白はタブではなく全てスペース)

というファイルをファイルオープン後、

fscanf(fp1,"%s%6d%10f%10f%10f%s\n", str1, &node, &x, &y, &z, str2);

を用いて読み込みを行っていますがうまくいきません。

問題は空白を埋めるスペースのところのようで、1行目を読み終えた時点で各変数を見てみたところ、
str1=NODE
node=1
x=8.45603e-307
y=1.33511e-306
z=1.44638e-307
str2=000
とx,y,zにこちらの意図しない値が入っているようです。
文字幅一定(この場合(NODE)(6文字整数)(10文字実数)(10文字実数)(10文字実数)(20文字空白)(3文字文字列))で読み込みを行う実行ファイルに対する入力ファイルのため、空白をタブに置き換えるなどの処理が出来ず、どうしたものか困っています。
ネットを色々見てみましたがうまい解決方法にたどりつかず、こちらで質問をさせていただきます。
お助けください。

Re:教えてください

Posted: 2008年2月27日(水) 15:07
by やそ
%10fのところを%10lfにしてもだめでしょうか?
double型の場合はlfだったと思いますが。

もしかして、またscanfのバッファリングの問題なのかな?
なら、fscanfじゃなくてfgetsとか使えばいいのかな?
char str[256];
FILE *fp;
double x,y,z;
char str1[10],str2[40] 


fgets(str,255,fp);

sscanf(str,"%s %6d %10lf %10lf %10lf %s", str1, &node, &x, &y, &z, str2);
とか?

Re:教えてください

Posted: 2008年2月27日(水) 15:24
by バグ
やそさんの言われる変更でいけると思います。
fscanfで読み込むならば…

fscanf(fp, "%s %d %lf %lf %lf %s", str1, &node, &x, &y, &z, str2);

これでだけでいいと思うのですが…何か理由があるのかな?

ありがとうございました

Posted: 2008年2月27日(水) 16:38
by Gantetsu
やそさん、バグさんのおっしゃる方法を試してみたところ、きれいにデータが入ってきました。
結局%lfとすべきところを、%fにしていたのがまずかったようです。
お二人から2通りのパターンも提示していただけて勉強になりました。
ここ数日これで悶々と悩んでいたので感動です。
本当にありがとうございました。