我有一个.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
。
这会是与内存访问相关的问题/堆栈溢出吗?
我的环境:
答案 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;