簡體   English   中英

如何將具有浮點數的文本文件讀取到C中的浮點數組

[英]How to read a text file that has float numbers to a float array in C

我一直在嘗試閱讀以下文本文件:

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。

從我的頭頂

    //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;
}

這種方法作為一個例子:

#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

使用vector可以解決這個問題,請參見下面的程序。myValues是2D數組。

ifstream input(“ Data.txt”); 向量myValues;

對於(float num; input >> num;)myValues.push_back(num);

要么

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

for(float f; input >> f;)myValues.push_back(f);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM