この問題は、shortestval
以下の変数で発生します。以下で宣言され、(1000 で) 初期化されます。
ENSEMBLE Cscan = *C;
ENSEMBLE Vscan = *V;
int departnumero = Vscan->numero, arrivenumero = Cscan->numero, departshortest, arriveshortest;
double shortestval = 1000;
LISTE aretescan = NULL;
int x=0, y=0, z=0;
while( (*C) != NULL && iteration < 100){
iteration++;
departshortest = 99;
arriveshortest = 99;
printf("\n\n shortestval = %i", shortestval); // Check 1
while(Vscan != NULL && x < 100){
printf("\n\n\t shortestval = %i", shortestval); // Check 2
while(Cscan != NULL && y < 100){
printf("\n\n\t\t shortestval = %i", shortestval);// Check 3
aretescan = aretes[Vscan->numero];
while(aretescan != NULL && z < 100){
printf("\n\n\t\t\t shortestval = %i", shortestval);// Check 4
if(aretescan->arrive == Cscan->numero){
if(aretescan->cout <= shortestval){
printf("\n \t\t\t (%d < %d)", aretescan->cout, shortestval);
shortestval = aretescan->cout;
departshortest = aretescan->depart;
arriveshortest = aretescan->arrive;
}
printf("\nD - %d \tA - %d \tC - %d", aretescan->depart, aretescan->arrive, aretescan->cout);
printf("\t\t\tD - %i, A - %i, C - %i", departshortest, arriveshortest, shortestval);
}
aretescan = aretescan->suiv;
z++;
}
Cscan = Cscan->voisin;
y++;
}
Vscan->voisin;
x++;
}
ただし、// Check 1
直後に出力される値は「0」です。while(aretescan != NULL && z < 100)
これは、次の行がループするまで続きます。
printf("\n \t\t\t (%d < %d)", aretescan->cout, shortestval);
shortestval
行の前に-858993460 を出力します
printf("\t\t\tD - %i, A - %i, C - %i", departshortest, arriveshortest, shortestval);
while ループの最初の反復で 5 の値を出力します。これは、私が期待していたものです (これは、設定された の値ですaretescan->cout
) shortestval
。しかし、繰り返し、if(aretescan->cout <= shortestval)
shortestval を = 858993460 に繰り返し取るように見えるか、if ステートメントに依存する操作に従って再割り当てするたびに非常に高い値に失敗すると、次の反復が来るまでにこの謎の値として読み続けられています。
私は完全に困惑しています。どんなアイデアでも心から感謝します。