我需要阅读以下类型的文件:
dl
format=edgelist1
n=10
data:
1 10 25.8
1 7 53.6
1 3 56.6
2 10 -19.8
2 8 -72.6
2 7 -96.7
2 6 -71.7
2 5 27.1
2 3 2.7
3 9 27.5
3 8 22.5
3 4 -78.2
4 7 5.3
4 6 -41.5
5 10 -61.6
5 9 5.2
5 7 83.8
5 6 -29.5
6 10 -87.4
6 9 -96.0
6 7 78.0
7 10 70.2
8 10 52.0
8 9 8.0
在data:
之后,每一行代表一个加权边。
我正在使用此循环来阅读它:
while(u!=0)
{
u=0;
v=0;
weight=0;
fscanf(fp,"%d",&u);
fscanf(fp,"%d",&v);
fscanf(fp,"%f",&weight);
fscanf(fp,"\n");
if (u==0)
{
break;
}
}
对大多数图表都适用。但是,在我测试的一个案例中,它永远不会离开循环。
起初,我认为这是因为它没有认识到它应该的浮动,但这意味着没有图形可以正确读取,因为格式是相同的。
此外,它成功地读取了一堆连接的1000个顶点图。但是,它与其中一个表现不佳。荒谬的边缘使我无法逐个分析,所以我需要帮助。
答案 0 :(得分:0)
不是验证u
的值,而是检查fscanf
的返回值:
int u, v;
float weight;
while (fscanf(fp, "%d %d %f", &u, &v, &weight) == 3) {
// ...
}