文件中的换行符在C程序中被读取为char

时间:2018-08-26 02:35:45

标签: c file scanf newline delimiter

我正在读取一个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

例如。

2 个答案:

答案 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