【发布时间】:2018-03-11 16:17:17
【问题描述】:
我有一个格式如下的输入 .csv 文件:
10012,85
11981,100
10728,65
第一个数字是学生证,后面是考试成绩。我需要能够读取不定数量的这些行,但我不确定如何在 C 中读取。我无法正确格式化 fscanf(一直给我运行时错误/崩溃)。这是我的尝试(请注意,结构就是我稍后将如何使用从文件中收集的数据):
int main(int argc, char **argv) {
int i = 0;
FILE *inf;
struct List list = SLL_new();
for(int i = 1; i < argc; i++){
inf = fopen(argv[i], "r");
int studentID = 0;
int grade = 0;
if(inf == NULL){
printf("bad");
return 1;
}
fscanf(inf, "%d,%d", &studentID, &grade);
printf("%d, %d", studentID, grade);
}
}
}
这是我在顶部使用输入文件运行时的输出(预编辑,当我使用 fread 时):
C:\Users\witcher\Documents\NJIT\CS 288>a midterm01.csv
10012,85
11981,100
10728,65δ
我认为这不适用于更多的行,无论如何,最后的特殊字符也让我感到困惑。我需要将这些值读取为整数,但如果我使用 fread,那么我需要稍后将它们转换为这些值。
【问题讨论】:
-
char buf[128];然后fread(buf, 256, 2, inf);这是不安全的。 -
可以改变一个或另一个,但我认为这不是我的问题。我不太了解第 2 和第 3 个参数,无法很好地阅读。
-
你不应该把
fopen放在循环中...只打开一次文件以避免内存泄漏 -
为什么
if(inf == NULL)在循环中? -
inf = fopen(argv[i], "r");:i未初始化。