我是编程新手。我设置的任务之一涉及将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]);
}
}
我似乎无法让它发挥作用。
答案 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;
}
}