教えてください

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

教えてください

#1

投稿記事 by Gantetsu » 17年前

初心者です。

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:教えてください

#2

投稿記事 by やそ » 17年前

%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:教えてください

#3

投稿記事 by バグ » 17年前

やそさんの言われる変更でいけると思います。
fscanfで読み込むならば…

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

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

Gantetsu

ありがとうございました

#4

投稿記事 by Gantetsu » 17年前

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

閉鎖

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