如何在C中读取具有浮点数的文本文件到float数组

时间:2016-10-12 05:05:48

标签: c arrays file text scanf

我一直在尝试使用以下内容读取文本文件:

0.000   1.800   3.240   4.374   5.249   5.905   6.377   7.696   6.887   6.974   6.974   6.904   6.778   6.609   6.406   6.177   5.930   5.670   5.403   5.133   4.863   4.596   4.333   5.077   3.829   4.589   3.360   3.140   2.931   2.732   2.543   2.365   2.198   2.040   1.891   1.752   1.622   1.500   1.387   1.281   1.182   1.091   2.006   0.927   0.853   0.786   0.723   0.665   0.611   0.561   0.515   0.473   0.434   0.398   0.365   0.335   0.307   0.281   0.257   0.236   0.216   1.197   0.180   0.165   0.151   0.138   0.126   0.115   0.105   0.096   0.088   0.080   0.073   0.067   0.061   1.055   0.051   0.046   0.042   0.038   0.035   0.032   0.029   0.026   0.024   0.022   0.020   0.018   0.017   0.015   0.014   0.012   0.011   0.010   0.009   0.009   0.008   0.007   1.006   0.006   0.005   0.005

此数字在文本文件中的格式如上。

我的代码如下

#include <stdio.h> 

#include <stdlib.h>

void main()

{

        FILE *file = fopen("Data.txt", "r");
        float integers[102];

        int i=0;
        int num;
        while(fscanf(file, "%f", &num) >0) {
            integers[i] = num;
            i++;
        }
        if( file == NULL )
         {
            printf("Error while opening the file.\n");

         }
        fclose(file);
        for(i = 0;i <102; i++){
        printf("integers[%d] = %f",i, integers[i]);
        }


}

printf的输出是运行时整数中的所有元素都为零。此外,当我尝试调试时,我注意到编译器跳过了while循环。我正在使用Code Composer Studios。

3 个答案:

答案 0 :(得分:1)

脱离我的头顶

    //int num;
    float num; // should be float isn't is
    while(fscanf(file, "%f", &num) >0) {

更多

int main() // int main instead of void
{
    /* All declarations at one place */
    FILE *file = NULL; 
    float integers[102], num ;
    int i = 0;
    /* Try Open and exit if there is problem */ 
    file = fopen("Data.txt", "r");
    if( file == NULL ) {
        printf("Error while opening the file.\n");
        return -1;
    }
    /* Read and store EOF is always better */
    while( fscanf(file, "%f", &num) != EOF ) {
        integers[i++] = num;
    }
    /* Done with File Close it */
    fclose(file);
    /* Final Prints */
    for( i = 0; i < 102; i++ ){
        printf("integers[%d] = %.02f\n",i, integers[i]);
    }
    /* All success at this point */
    return 0;
}

答案 1 :(得分:1)

这种方法就是一个例子:

#include <stdio.h>
#include <stdlib.h>

int main() {
  FILE * fp;
  float fval[102];
  int n, i;

  fp = fopen("foo.txt", "w+");
  if (fp == NULL) {
    printf("failed to open file\n");
    return 1;
  }

  fputs("0.000   1.800   3.240   4.374   5.249   5.905   6.377   7.696 ", fp);
  rewind(fp);

  n = 0;
  while (fscanf(fp, "%f", &fval[n++]) != EOF)
    ;

  /* n-1 float values were successfully read */
  for (i=0; i<n-1; i++)
    printf("fval[%d]=%f\n", i, fval[i]);

  fclose(fp);
  return 0;
}

我得到了这个输出:

fval[0]=0.000000
fval[1]=1.800000
fval[2]=3.240000
fval[3]=4.374000
fval[4]=5.249000
fval[5]=5.905000
fval[6]=6.377000
fval[7]=7.696000

答案 2 :(得分:-2)

使用矢量我们可以解决问题。参见下面的程序。其中myValues是2D数组。

ifstream输入(“Data.txt”); 矢量myValues;

for(float num; input&gt;&gt; num;)     myValues.push_back(NUM);

ifstream输入(“my-file.txt”); std :: vector myValues;

for(float f; input&gt;&gt; f;)     myValues.push_back(F);