如何将值从CSV文件移动到浮点数组?

时间:2017-09-23 21:21:26

标签: c arrays file csv

我有一个.csv文件格式如下:

24.74,2.1944,26.025,7.534,9.317,0.55169 [etc]

我想将浮点值移动到浮点数数组中。

数组看起来像这样:

fValues[0] = 24.74
fValues[1] = 2.1944
fValues[2] = 26.025
fValues[3] = 7.534
fValues[4] = 9.317
[etc]

我要处理1000个号码。

实现此任务的代码是什么?

这是我最接近我的代码:

int main()
{
  FILE *myFile;

  float fValues[10000];
  int n,i = 0;

  myFile = fopen("es2.csv", "r");
  if (myFile == NULL) {
    printf("failed to open file\n");
    return 1;
  }

  while (fscanf(myFile, "%f", &fValues[n++]) != EOF);

  printf("fValues[%d]=%f\n", i, fValues[5]); //index 5 to test a number is there.

  fclose(myFile);
  return 0;
}

此外,当我运行此代码时,我会收到退出代码3221224725

这会是与内存访问相关的问题/堆栈溢出吗?

我的环境:

  • Sublime Text 3,
  • GCC编译器,
  • 较新的Windows笔记本电脑

1 个答案:

答案 0 :(得分:2)

当您从文件中读取时,您没有跳过文件中的逗号。

第一次调用fscanf会通过float格式说明符读取%f。在后续读取时,文件指针位于第一个逗号处,并且不会超过该值,因为您仍在尝试读取浮点数。

您需要在循环内向fscanf添加单独的调用以使用逗号:

while (fscanf(myFile, "%f", &fValues[n++]) == 1) {
  fscanf(myFile, ",");
}

此外,您尚未初始化n

int n,i = 0;

当您尝试增加它,从而读取未初始化的值时,您调用undefined behavior。像这样初始化它:

int n = 0, i = 0;