gpt4 book ai didi

c - 读取格式化文本输入

转载 作者:行者123 更新时间:2023-11-30 17:31:32 25 4
gpt4 key购买 nike

我有一个 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 的指针不会移动。我无法一次性读取一行,因为每行中的元素数量各不相同

最佳答案

第三种方法最接近,尝试这个修改。使用 "%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;
}
}

关于c - 读取格式化文本输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24561297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com