Citazione Originariamente Scritto da Skywolf Visualizza Messaggio
per testare un programma che ho scritto, che dovrebbe implementare la struttura dati "albero di decisioni" in C (in C++ era più facile ma mi piace farmi male) ho messo nel main un codicillo che dovrebbe, ad apprendimento completato, stampare l'uscita dell'albero per gli ingressi che gli do io.

Succede che l'uscita vale 0 per ogni scelta degli ingressi.
Ma se mi faccio stampare l'albero vedo che a volte dovrebbe essere 0, a volte 1.

Vedo per quale combinazione degli ingressi dovrebbe valere 1, ma niente.

Controllo che segua i rami giusti dell'albero a seconda dell'ingresso: lo fa.

Ma l'uscita è sbagliata.

Disperato, vado nella routine che dovrebbe ricavare l'output dell'albero in funzione dell'input e, NELLA routine, mi faccio stampare l'output.


E questo è giusto





In pratica, sono nella seguente condizione (semplifico)


main(){
robba
printf("%lf",calcolaOutput(parametri));
}

double calcolaOutput(parametri){
robba
return OutputNodoGiusto(parametri);
}

double OutputNodoGiusto(parametri){
robba
printf ("%lf",Output);
return Output;
}


Dovrebbe stampare due volte la stessa cosa, no?




No.


Dacci il codice con l'esatta firma delle funzioni e la loro chiamata e la dichiarazione dei parametri che passi.
Per capirci:

Codice:
int foo ( int pippo, double* pluto );
{
  int cippa = ...
   /* robba; */
   retrurn cippa
}

void main ( void )
{
   int param1;
   int risultato;
   double param2;
  
   risultato = foo( param1, &param2 );
}
Also, c'e' una forward declaration delle funzioni prima del main? Nell'ordine in cui le hai messe in C quel codice manco compila, o se compila potrebbe generare delle chiamate con firma scazzata.