【发布时间】:2018-08-26 02:35:45
【问题描述】:
我正在阅读一个 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
例如。
【问题讨论】:
-
为什么会令人惊讶?你从来没有读过换行符。
-
问题是它正在读取换行符。上一行的换行符被读取为下一个节点 ID 字符串的一部分。
-
是的,很明显。如果您想在阅读该行的其余部分时阅读换行符,您应该在格式的末尾加上
%*1[\n]之类的东西,对吧?但你没有,所以字符仍然在那里,可以被下一个 scanf 读取。
标签: c file scanf newline delimiter