- 締切済み
ファイルの読み込みが上手くいかず困っています。
#include<stdio.h> #include<math.h> #include<time.h> #define i0 2 /*流体部分の最小格子番号*/ #define j0 2 #define k0 2 #define in 41 /*流体部分の最大格子番号*/ #define jn 41 #define kn 41 #define imax 44 /*境界を含めた格子の数*/ #define jmax 44 #define kmax 44 #define N 100000 void sabun(void); int i,j,k,n,pgosa,vgosa,x,y,z; double u[imax][jmax][kmax], v[imax][jmax][kmax], w[imax][jmax][kmax], p[imax][jmax][kmax]; double u2[imax][jmax][kmax], v2[imax][jmax][kmax], w2[imax][jmax][kmax], p2[imax][jmax][kmax]; double Vn=-1.0, a=10.0; /*初期値*/ double dt=0.001, dx=0.025, dy=0.025, dz=0.025, rei=250000.0; double dx2, dy2, dz2, po; main() { FILE *fpin,*fpout; clock_t start,end; start = clock(); /*時間計測開始*/ fpin=fopen("H-clock.dat", "r"); /*入力ファイル*/ if(fpin==NULL) { printf("入力ファイルのオープンに失敗しました"); return 0; } x=i-1; y=j-1; z=k-1; for(i=i0;i<=in+1;i++){ for(j=j0;j<jn+1;j++){ for(k=k0;k<kn+1;k++){ fscanf(fpin,"%d %d %d %.6lf %.6lf %.6lf %.6lf\n",&x,&y,&z,&u[i][j][k],&v[i][j][k],&w[i][j][k],&p[i][j][k]); printf("%d %d %d %.6lf %.6lf %.6lf %.6lf\n",x,y,z,u[i][j][k],v[i][j][k],w[i][j][k],p[i][j][k]); } } } 読み込みの部分のある部分まで載せているのですが読み込みの部分に問題が あると思うのですがどうすれば読み込んでくれるのか分かりません。ですので解決法を教えていただけると助かります、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Gotthold
- ベストアンサー率47% (396/832)
fscanfの戻り値をちゃんと確認しましょう。 そうすれば、最初のfscanfで数値を3つしか読めていないことが分かります。 読めていないのは、書式指定がおかしいからだと思います。 fscanf(fpin,"%d %d %d %lf %lf %lf %lf\n",&x,&y,&z,&u[i][j][k],&v[i][j][k],&w[i][j][k],&p[i][j][k]); printf("%d %d %d %.6f %.6f %.6f %.6f\n",x,y,z,u[i][j][k],v[i][j][k],w[i][j][k],p[i][j][k]);
- Tacosan
- ベストアンサー率23% (3656/15482)
「読み込みの部分に問題があると思う」というのは, どうしてそのように思ったんでしょうか? できれば「このように読みこまれているはずが, 実際にはこのように読みこまれているので問題があると思った」のように書いてもらえると助かります.
補足
データを読み込んでいるか確認するためにprintfで読み込んだデータを出力させた時に読み込ませたdatファイルの値とことなり出力された値がほとんど0で出力されていたからです。 最終行で本当は 41 41 41 0.000000 0.000000 0.000000 -5.641614 となるはずのところ 1 1 0 0.000000 0.000000 0.000000 0.000000 のように出力されていたからです。
- SilverThaw
- ベストアンサー率32% (260/806)
読みこみたいデータのフォーマットは?
補足
1 1 1 0.004223 0.004302 0.002611 -5.638806 1 1 2 0.004101 0.004277 -0.001024 -5.662546 1 1 3 0.004162 0.003904 -0.001774 -5.638171 1 1 4 0.003482 0.002582 -0.001253 -5.660216 1 1 5 0.003934 0.002219 -0.000749 -5.638055 1 1 6 0.003437 0.001163 0.000195 -5.659870 上のようなデータが41×41×41行あるdatファイルを読み込む感じです。 よろしくお願いします。
お礼
書式設定がおかしいのが原因だったんですね。 まだまだ勉強不足のため理由が分からなかったのですがGottholdさんのおかげで解決できました。ありがとうございました。まだまだ勉強不足のためまた質問するかもしれませんがその時はまたお願いします。本当にありがとうございました。