我正在读取一个csv文件,因此每个元素都用逗号分隔。我使用逗号作为分隔符,但最后一个元素使用了换行符。问题在于,现在将换行符读取到下一个节点的第一个元素中。
fscanf(file,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%
[^,],%[^,],%[^,],%[^,],%[^\n]",
newnode->id,
newnode->name,
newnode->sex,
newnode->age,
newnode->height,
newnode->weight,
newnode->team,
newnode->noc,
newnode->games,
newnode->year,
newnode->season,
newnode->city,
newnode->sport,
newnode->event,
newnode->medal);
所以第一个节点会很好,但秒的ID会是:
ID:\ n249655
例如。
答案 0 :(得分:1)
我建议您使用fgets
+ sscanf
组合。 fgets
读取一行到缓冲区,而sscanf
将解析该行。这样可以避免代码上的缓冲区溢出漏洞,并可以修复错误。
这是一个完整的示例,该示例从标准输入中读取3个以逗号分隔的整数。
#include <stdio.h>
static char buffer[BUFSIZ];
int main(int argc, char **argv)
{
int a,b,c;
while (fgets(buffer, BUFSIZ, stdin) != NULL) {
sscanf(buffer, "%d,%d,%d", &a, &b, &c);
printf("%d, %d, %d\n", a, b, c);
}
return 0;
}
答案 1 :(得分:0)
我不会使用strcpy(Book1.title, "C Programming");
之类的库函数来读取CSV文件,因为仅用逗号定界并不能解决其中带有逗号的加引号的字符串。如果您知道只使用没有引号的CSV文件,那么您就很好了。
如果您将格式字符串添加到fscanf
系列函数的前面,并带有空格,则输入开头的所有空白字符都将被忽略:
scanf