Проблемы с чтением графика в файле с помощью scanf - PullRequest
0 голосов
/ 06 июня 2018

Мне нужно прочитать следующий тип файла:

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 голосов
/ 06 июня 2018

Вместо проверки значения u, проверьте возвращаемое значение fscanf:

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