如何将CSV文件存储为C中的浮点数组

时间:2014-11-25 16:57:15

标签: arrays csv matrix

我是编程新手。我设置的任务之一涉及将CSV文件(具有2列12个数字)读取到2D阵列中。我将如何在C代码中执行此操作?这样的事情会起作用吗?

for(i=0;i<12;i++) {
    for(j=0;j<2;j++) {
        fscanf(liftcoeff,"%f,%f",&array1,&array2);
        array[i][j] = array1,array2;
    }
}

还是喜欢这个?

for(i=0;i<12;i++) {
    for(j=0;j<2;j++) {
        fscanf(liftcoeff,"%f,%f",array[i][j]);
    }
}

我似乎无法让它发挥作用。

1 个答案:

答案 0 :(得分:2)

仔细检查循环逻辑。你的外部for循环负责循环文件的12行。内部for循环负责命中两列,但是你的fscanf调用正在查找用逗号分隔的2个浮点数。基本上,您尝试读取的数据是现有数据的两倍。

修改
不幸的是,目前没有配备C编译器的机器,但以下内容应该足够接近。

for (int i = 0; i < 12; i++) {
    fscanf(liftcoeff, "%f,%f", &array[i][0], &array[i][1]);
}

然后,您可以通过将数据打印到屏幕来验证您是否已正确读取数据。

for (int i = 0; i < 12; i++) {
    printf("%f,%f", array[i][0], array[i][1]);
}

在您完成fclose(lifecoeff);后,不要忘记关闭文件

编辑2:
正如评论中所建议的那样,一些非常基本的错误检查:

for (int i = 0; i < 12; i++) {
    int count = fscanf(liftcoeff, "%f,%f", &array[i][0], &array[i][1]);

    // Handle early end of file, as in there were fewer than 12 lines.
    if (count == EOF) {
        fprintf(stderr, "ERROR: Unexpected end of file.\n");
        break;
    }
    // Handle line of CSV not matching two floats separated by comma. 
    else if(count != 2) {
        fprintf(stderr, "ERROR: fscanf matching error line %d\n", i);
        break;
    }
}