我想fscanf一个csv文件,它是fprintf的输出,我设置了相同的格式,但它没有工作,这意味着当我使用该函数fscanf我刚制作的文件时,它没有&#39多汁,甚至没有进入while循环。那么,如何修改它以使其工作?
fprintf的一部分
fp = fopen("Out.csv", "w");
fprintf(fp, "%99s,%d,%99s,%99s\n", current->group, current->id, current->name,
current->address);
fscanf的一部分
fp = fopen("Out.csv", "r");
while (fscanf(fp, "%99s,%d,%99s,%99s\n", group, &id, name, address) == 4) {
head = push_sort(head, group, name, id, address);
printf("%99s", name);
}
答案 0 :(得分:1)
我怀疑它是因为"%s"
系列中的*scanf()
说明符在找到空格时停止扫描,您可以告诉fscanf()
忽略哪个特定字符,它会停在那个角色。
我相信以下格式字符串可以正常工作
"%99[^,],%d,%99[^,],%99[^,\n]\n"
阅读this link以了解我认为该模式可行的原因,专门搜索[
说明符。
*scanf()
功能很难,但它们总是很难让它们正常工作,不过如果你正在生成这条线并且你确定它包含的内容并且不会发生任何意外,你可以信任它。
如果您检查返回值,那么您将是安全的,因此如果您无法读取您认为有效的行,那么您可以尝试fgets()
文件中的一行,并使用strchr()
或strtok()
,我更喜欢strchr()
,因为
strlen()
的情况下推断更多,例如令牌的长度。