繁体   English   中英

为什么我的数据没有完全添加到我的阵列中?

[英]Why Is my data not being completely added to my array?

我正在尝试使用 strtok 从 CSV 文件 output.csv 中获取数据,然后将其打印出来。 但是,当我打印出来时,它似乎将最后一个数据点分成 2 个条目,第二个被放入数组的下一个条目中。

time,identifier,x,y,z
2000.123,A123,2.849,0.34,-0.543
2001.456,A123,3.493,0.19,-0.987
2001.735,A123,5.403,1.587,0.579,-0.254

我正在读取数据并使用结构和数组来存储它。

struct  Data {
double Time_Data;
char* ID;
double X_Data;
double Y_Data;
double Z_Data;

};

int main(int argc, char *argv[]){
char* field;
char line[50];
struct Data dataPoints[3567];
FILE * pointer;
fpointer = fopen("output.csv", "r");

if(fpointer == NULL){
    printf("Unable to open file \n");
    return 0;
}    
int LineCount = 0;
while(fgets(line, 30, fpointer) != NULL){

    field = strtok(line, ",");
    dataPoints[LineCount].Time_Data = atof(field);

    field = strtok(NULL, ",");

    field = strtok(NULL, ",");
    dataPoints[LineCount].X_Data = atof(field);

    field = strtok(NULL, ",");
    dataPoints[LineCount].Y_Data = atof(field);
    field = strtok(NULL, ",");
    dataPoints[LineCount].Z_Data = atof(field);

    LineCount++;
}


fclose(fpointer);


printf("%lf    %lf    %lf    %lf\n", dataPoints[0].Time_Data, 
dataPoints[0].X_Data,dataPoints[0].Y_Data, dataPoints[0].Z_Data);
printf("%lf    %lf    %lf    %lf\n", dataPoints[1].Time_Data, 
dataPoints[1].X_Data,dataPoints[1].Y_Data, dataPoints[1].Z_Data);
printf("%lf    %lf    %lf    %lf\n", dataPoints[2].Time_Data, 
dataPoints[2].X_Data,dataPoints[2].Y_Data, dataPoints[2].Z_Data);
printf("%lf    %lf    %lf    %lf\n", dataPoints[3].Time_Data, 
dataPoints[3].X_Data,dataPoints[3].Y_Data, dataPoints[3].Z_Data);
printf("%lf    %lf    %lf    %lf\n", dataPoints[4].Time_Data, 
dataPoints[4].X_Data,dataPoints[4].Y_Data, dataPoints[4].Z_Data);
printf("%lf    %lf    %lf    %lf\n", dataPoints[5].Time_Data, 
dataPoints[5].X_Data,dataPoints[5].Y_Data, dataPoints[5].Z_Data);

return 0;

}

问题是由于某种原因 Z_Data 被拆分为 2 并移动到数组中的下一个条目。 我得到的 output 是

0.000000    0.000000    0.000000    0.000000
2000.123000    2.849000    0.340000    -0.500000
43.000000    0.000000    0.000000    0.000000
2001.456000    3.493000    0.190000    -0.900000
87.000000    0.000000    0.000000    0.000000
2001.735000    5.403000    1.587000    0.500000

我不确定为什么会这样。

CSV 文件每行的长度为:

time,identifier,x,y,z                  : 21 chars
2000.123,A123,2.849,0.34,-0.543        : 31 chars
2001.456,A123,3.493,0.19,-0.987        : 31 chars
2001.735,A123,5.403,1.587,0.579,-0.254 : 38 chars

您将30指定为fgets()的缓冲区大小。 该值不足以读取数据线。
该值应该是sizeof(line)因为您为line分配了 50 个字符并且应该避免使用幻数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM