[英]Reading multiple lines of doubles with fscanf
我有一個輸入文件,每行包含六個雙打,我想由fscanf讀取。 但是,從輸入文件中讀取數字后,所有存儲的值均為零。 例如:
輸入:
8.260358155 0.217414463 0.079918794 -0.068255156 -0.124913458 0.821136998
0.095921056 0.878265878 1.099486349 0.766342809 1.918243674 0.476907831
1.050441605 8.451442631 0.945819695 -0.440024089 -1.149013541 0.374284191
碼:
double r[NMAX][3];
double rv[NMAX][3];
int nAtom = 3;
int n;
FILE *loadFile = fopen(LoadName,"r");
if (loadFile == NULL){
printf("ERROR: can't open loadFile\n");
exit(1);
}
fscanf(loadFile,"%d",&nAtom);
for (n=0; n<nAtom; ++n){
fscanf(loadFile, "%f %f %f %f %f %f",
&r[n][0],&r[n][1],&r[n][2],&rv[n][0],&rv[n][1],&rv[n][2]);
}
fclose(loadFile);
for (n=0; n<nAtom; ++n){
printf("%12.9f %12.9f %12.9f %12.9f %12.9f %12.9f\n",
r[n][0],r[n][1],r[n][2],rv[n][0],rv[n][1],rv[n][2]);
}
輸出:
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
有人可以說我在這里做錯了嗎?
就像@BLUEPIXY在評論中說的,您要告訴fscanf
將輸入值解析為float
,但是將其放入double
。 您可以通過(按照建議)使用%lf
告訴fscanf
您正在填充雙精度數來解決此fscanf
,或者將r
和rv
聲明為float
的數組。
如果您對它們的警告很好,那么編譯器就可以很好地警告此類事情。
您的fscanf應該如下所示:
fscanf(loadFile, "%lf %lf %f %lf %lf %lf",&r[n][0],&r[n][1],&r[n][2],&rv[n][0],&rv[n][1],&rv[n][2]);
然后刪除該行
fscanf(loadFile,"%d",&nAtom);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.