无法使用scanf

时间:2018-06-05 23:33:42

标签: c++ graph scanf

我需要阅读以下类型的文件:

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个顶点图。但是,它与其中一个表现不佳。荒谬的边缘使我无法逐个分析,所以我需要帮助。

1 个答案:

答案 0 :(得分:0)

不是验证u的值,而是检查fscanf的返回值:

int u, v;
float weight;
while (fscanf(fp, "%d %d %f", &u, &v, &weight) == 3) {
    // ...
}