gpt4 book ai didi

c - 在 do..while 循环中递增 sscanf() 并将行存储到结构中

转载 作者:行者123 更新时间:2023-11-30 15:02:30 24 4
gpt4 key购买 nike

我得到了一个这样的文件,instance10_002 。我正在尝试将 MST 数据点存储到我制作的结构中。从我的调试 printf 语句中,我可以看到我已成功迭代该文件并到达我的 MST 数据点。

这是我的代码:

void collect_edges(char filename[31])
{

int counter = 0, check = 0;
char c, str[64];
int index;
input_file = fopen(filename, "r");
if (input_file == NULL)
{
printf("Input file does not exist\n");
exit(1);
}

while (fgets(str, 64, input_file))
{
c = str[0];
if (c != '#' && c != '\n')
{
counter++;
printf("Check for counter\n");
if (counter == 2)
{
printf("Check Check\n");
sscanf(str, "%d", &num_pt);
printf("Check for counter 2\n");
index = num_pt + 3;
}


if (counter == (index))
{
printf("Check for counter 13\n");
printf("Counter is: %d\n", counter);
do {
sscanf(str, "%d %d %d", &points[counter-index].parent, &points[counter-index].x, &points[counter-index].distance_to_tree);
check++;
counter++;
} while (check <= num_pt - 2);
break;
}
}
}
fclose(input_file);

}

我使用了 do..while 循环将所有 MST 数据点存储到我的结构中,但是当我访问它们时,它打印出 0 9 45,这是我的结构的第 0 个索引,而不是所有索引的正确数据。

通过以下方法输出:

collect_edges(argv[inputfile]);
printf("%d\n", points[3].parent);
printf("%d\n", points[3].x);
printf("%d\n", points[3].distance_to_tree);

Output

实例文件中所示的正确输出:

5 8 40

我最初认为我的计数器没有在我的 do..while 循环中递增,但我已经包含了增量,现在它扫描第一个 MST 数据行并将其保存在结构。有没有办法增加 sscanf 函数来增加和扫描所有其他数据点行?

最佳答案

更新:我已经解决了我的问题!

做了更多研究,我发现使用 fscanf 更好而不是sscanf在我的do..while循环为fscanf利用输入文件流。因此,我不必创建一个循环来进一步迭代每一行,就像我必须为 sscanf 所做的那样。 .

根据 fscanf 更改我的代码,我的程序产生正确的输出。

此外,我还必须硬增量我的 counter以获得正确的索引。也可以通过保留 counter 来完成以下操作与 index 相同并且硬递减相反。

更改的代码结构:

if (counter == (index))
{
printf("Check for counter 13\n");
printf("Counter is: %d\n", counter);
do {
fscanf(input_file, "%d %d %d", &points[(counter + 1)-index].parent, &points[(counter + 1)-index].x, &points[(counter+1)-index].distance_to_tree);
check++;
counter++;
} while (check <= num_pt - 2);
break;

执行以下命令后的输出:

collect_edges(argv[inputfile]);
printf("%d\n", points[3].parent);
printf("%d\n", points[3].x);
printf("%d\n", points[3].distance_to_tree);

Corrected Output

关于c - 在 do..while 循环中递增 sscanf() 并将行存储到结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41025971/

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