[英]I am trying to read from a .csv file with fscanf
我正在尝试从 csv 文件中读取,但输出不是我所期望的输出是这样的:
|1| |Dummy,Person| ||
|2| |Dummy,Person| ||
|3| |Dummy,Person| ||
|4| |Dummy,Person| ||
我希望它是:
|1| |Dummy| |Person|
|2| |Dummy| |Person|
|3| |Dummy| |Person|
|4| |Dummy| |Person|
我该怎么办? 这是代码:
struct Person {
int id;
char firstname[50];
char lastname[50];
} Person;
void loadPersonInfo(FILE *fp) {
int knt;
int id;
for (knt = 1; knt < 5; knt++) {
struct Person new_person;
char firstname[50];
char lastname[50];
fscanf(fp, "%d , %s ,%s ", &id, firstname, lastname);
strcpy(new_person.firstname, firstname);
strcpy(new_person.lastname, lastname);
new_person.id = id;
People[knt] = new_person;
printf("|%d| |%s| |%s| \n", People[knt].id, People[knt].firstname,
People[knt].lastname);
}
}
void readFile() {
printf("Reading Data From People.csv File.\r\n ");
FILE *fp;
fp = fopen("People.csv", "r");
if (fp == NULL) {
printf("File could not be opened \r\n");
} else {
loadPersonInfo(fp);
}
fclose(fp);
printf("Done!\r\n");
}
因为%s
没有停在,
。 它在第一个非空白字符处停止。 因此,您的 scanf 中的第一个%s
读取该行直到换行符,包括,
和第二个字段。
A %[^,]
将首先停止,
。 确保检查fscanf
的返回值。 不要在没有指定最大宽度的情况下使用%s
或%[
,以便防止溢出错误。
int ret = fscanf(fp, "%d,%49[^,],%49[^\n]", &id, firstname, lastname);
if (ret != 3) {
// AAaaa! error
abort();
}
for (knt = 1; knt < 5; knt++)
请注意,数组从 0 开始索引,而不是从 1 开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.