读取单精度使用C中的双精度变量

时间:2014-06-02 21:45:17

标签: c io

我有一个包含单精度数据的文本文件,例如

 0.123456 0.123456 0.123456

我想使用以下语法在C中阅读它:

 FILE *myfile.
 double c[4];
 int i=0;
 c[0]=1;
 myfile=fopen(...)
 for (i=1;i<=3;i++) {
    fscanf(myfile, "%lf", &c[i]);
    }

我打印的是一个很大的数字,显然是错误的。 任何人都可以解决这个问题吗?

Ps:我在查看答案后编辑了我的问题。 这是我的更多信息:

 #include <windows.h>
 #include <stdio.h>
 #include <math.h>
 #include <string.h>
 #include <stdlib.h>
 FILE *file_params;
 int main() {
 double *delx;
 int i;
 file_params=fopen(filename,"r");
 delx = (double *) malloc ((4)*sizeof(double));
 delx[0]=0;
 for(i=1; i<=3; i++) fscanf(file_params, "%lf", &delx[i]);
 for(i=1; i<=3; i++) printf("%lf", delx[i]);
 return 0;
 }

4 个答案:

答案 0 :(得分:1)

数组索引从0开始。您从1开始。

答案 1 :(得分:1)

for循环应该是

for (i=0;i<3;i++)
    fscanf(myfile,"%lf",&c[i]);

答案 2 :(得分:1)

我看到以下错误:

  1. 使用%lf代替lf%

  2. 使用&c[i]代替&c

  3. 在for循环中,使用

    for (i=0;i<3;i++) {
    

    而不是

    for (i=1;i<=3;i++) {
    
  4. 总之,

    for (i=0;i<3;i++) {
        fscanf(myfile, "%lf", &c[i]);
        }
    

答案 3 :(得分:1)

响应我写的代码版本......

  1. 删除#include <windows.h>
  2. filename更改为存在的文件的名称
  3. 在继续
  4. 之前检查file_params != NULLdelx != NULL
  5. 检查fscanf的返回值,例如if ( 1 != fscanf(file_params, "%lf", &delx[i]) ) { printf("fscanf failed\n"); exit(EXIT_FAILURE); }
  6. printf("%lf",更改为printf("%f ",
  7. 计划有效。

      

    我打印的是一个很大的数字,显然是错误的。

    可能你看到的数字彼此相邻而没有空格(因为你没有打印空间)并且没有意识到你所看到的。