用fscanf读取多行双打

时间:2015-06-02 15:50:40

标签: c double scanf

我有一个输入文件,每行包含六个双打,我想通过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 

有谁可以说我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

正如@BLUEPIXY在评论中所说,您告诉fscanf将您的输入值解析为float,但要将它们放入double s。您可以通过(建议)使用%lf告诉fscanf您正在填写双打,或者将rrv声明为{{1}的数组来解决此问题。 }第

编译器非常善于警告这些事情,如果你很好地问他们。

答案 1 :(得分:0)

你的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);