我有一个输入文件,每行包含六个 double ,我希望 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
s。您可以通过(按照建议)使用 %lf
告诉 fscanf
您正在填充 double ,或者声明 r
和 来解决此问题rv
为 float
数组。
如果你善意地询问,编译器会很好地警告此类事情。
关于c - 使用 fscanf 读取多行 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30600786/