c - 使用 fscanf 读取多行 double

标签 c double scanf

我有一个输入文件,每行包含六个 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,但让它将它们放入 doubles。您可以通过(按照建议)使用 %lf 告诉 fscanf 您正在填充 double ,或者声明 r 来解决此问题rvfloat 数组。

如果你善意地询问,编译器会很好地警告此类事情。

关于c - 使用 fscanf 读取多行 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30600786/

相关文章:

可以将指针传递给 C 编程中的 scanf 参数吗?

c - scanf 中 double 的格式说明符

c - ‘)’ token 和变量未声明错误之前的预期表达式

c++ - C/C++ : double constants in class are inaccurate

c - Scanf 没有获取整个字符串

c# - 如何处理大多数小数不能用二进制准确表示的事实?

c# - 在 C# 中将 double 转换为 float 给出错误的值

c - 微型 C 编译器 : "error: unknown opcode ' jmp'"

c - 将字符串添加到 LPTSTR

c - readv和writev的工作流程。使用 readv 和 writev 而不是使用 read 和 write 的所有优点是什么?