初心者です。
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:教えてください
%10fのところを%10lfにしてもだめでしょうか?
double型の場合はlfだったと思いますが。
もしかして、またscanfのバッファリングの問題なのかな?
なら、fscanfじゃなくてfgetsとか使えばいいのかな?
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:教えてください
やそさんの言われる変更でいけると思います。
fscanfで読み込むならば…
fscanf(fp, "%s %d %lf %lf %lf %s", str1, &node, &x, &y, &z, str2);
これでだけでいいと思うのですが…何か理由があるのかな?
fscanfで読み込むならば…
fscanf(fp, "%s %d %lf %lf %lf %s", str1, &node, &x, &y, &z, str2);
これでだけでいいと思うのですが…何か理由があるのかな?
ありがとうございました
やそさん、バグさんのおっしゃる方法を試してみたところ、きれいにデータが入ってきました。
結局%lfとすべきところを、%fにしていたのがまずかったようです。
お二人から2通りのパターンも提示していただけて勉強になりました。
ここ数日これで悶々と悩んでいたので感動です。
本当にありがとうございました。
結局%lfとすべきところを、%fにしていたのがまずかったようです。
お二人から2通りのパターンも提示していただけて勉強になりました。
ここ数日これで悶々と悩んでいたので感動です。
本当にありがとうございました。