【发布时间】:2018-01-09 07:59:09
【问题描述】:
我正在尝试从名为“CRIMES_Data.csv”的文件中读取值。我尝试打印读取的值并得到垃圾。我检查了一下问题出在哪里,结果发现根本没有从文件中读取值。
int i, j, RAW_DATA[MAX_ROWS][MAX_COLS];
FILE *fp;
fp = fopen("CRIMES_Data.csv", "r");
for (i=0; i<MAX_ROWS; i++) {
for (j=0; j<MAX_COLS-1; j++) {
fscanf(fp, "%d,", &RAW_DATA[i][j]);
}
fscanf(fp, "%d\n", &RAW_DATA[i][j]);
}
是我没有正确打开文件还是我尝试读取值的方式有问题?我是新手,之前没用过文件。
该文件有 31 行和 19 列。 示例行:
16,18,6,24,16,18,13,12,14,12,8,3,15,6,16,13,9,19,11
6,7,8,10,14,13,8,8,5,12,4,4,8,6,6,7,6,6,7
我尝试使用
打印for(i=0;i<MAX_ROWS;i++){
for(j=0; j<MAX_COLS;j++){
printf("%d", RAW_DATA[i][j]);
}
printf("\n");
}
以确保在我继续下一个任务之前正确读取值。 由于它打印垃圾,我在 fscanf 循环之前将每个值设置为 1,这导致打印 1。
另一行示例输入(更新了正确的行数和列数):
垃圾示例一行:
1027102743384832642021664202164338483243385024435158484338502443385024204743515856433848326420672433848322008298648435158560
但我已将数组中每个元素的值设置为 1 之前的 fscanf 部分,因此垃圾现在只有 31 行,每行 19 1s。
【问题讨论】:
-
您的
RAW_DATA声明在哪里?你检查过fp != NULL吗?CRIMES_Data.csv的一部分是什么样的? -
在你得到垃圾的地方打印代码也是值得的。错误可能在那里。
-
我的赌注是
fp = fopen("CRIMES_Data.csv", "r");失败了。if (!fp) { perror ("CRIMES_Data.csv"); return 1; } -
更多关于您的问题,或者更确切地说是您的问题,请read about how to ask good questions。然后编辑问题以改进它。例如,向我们展示文件的一些示例内容。并告诉我们更多关于您显示的代码是如何失败的,以及您尝试对debug your code 执行的操作。看到Minimal, Complete, and Verifiable Example 也很好。
-
只是一个快速的建议;我实际上很确定这是礼仪,但请不要编辑您的问题的答案;写一个答案,而不是。作为一名编程学生,我相信你很快就会发现这种结构的价值,即使是在潜意识层面,尽管如果你有意识地学习搜索引擎优化,它会更加牢固......
标签: c file-handling