我有一个txt文件,我想从中获取输入。它看起来像这样:
1 33,3434 34,562 ...
2 24,354 55,234 ...
....
由标签分隔。每行末尾还有一个制表符和换行符。 我想在链表列表中读取逗号分隔的数字,作为整数。结构如下:
struct node
{
int vertex;
int dist;
struct node* next;
};
我尝试了以下方法:
1. Using fgets and strtok:
fgets(s,300,fp)
while(strtok(...)!=NULL)
这会在末尾读取一个额外的东西(\ n,\ r),这会产生问题。
2. Using fscanf:
for(i=1;i<=SIZE;i++)
{
fscanf(f,"%d",&i);//once per iteration
fscanf(f,"%d,%d",&a,&b);//while it returns 2
}
此方法仅读取一行。我无法弄清楚如何将指针移动到下一行。
3. Using fgets and sscanf:
for(i=1;i<=SIZE;i++)
{
fgets(s,300,f);
sscanf(s,"%d",&c);//once in a loop
sscanf(s,"%d,%d",&a,&b)//while it returns 2
}
然而,当sscanf再次被调用时,sscanf的指针不会移动。由于每行中元素的数量不同,我无法一次读取一行
答案 0 :(得分:0)
第3种方法最接近,请尝试此修改。使用"%n"
知道解析停止的位置。
注意:查看有关使用sscanf()
。
for(i=1; i<=SIZE; i++) {
char s[300];
if (fgets(s, sizeof s,f) == NULL) HandleEarlyEOF();
int a,b,c;
char *p = s;
int n;
if (sscanf(p, "%d%n", &c, &n) != 1) HandleMissingIndex();
p += n;
while (sscanf(p, "%d ,%d%n", &a, &b, &n) == 2) {
Use(a,b,c);
p += n;
}
}