La funzione è corretta, se vuoi esserne sicuro prova a fare i passaggi a mano!
La funzione è corretta, se vuoi esserne sicuro prova a fare i passaggi a mano!
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
E in cosa potrei aver sbagliato? La funzione è quella che ti ho scritto prima, se dici che va bene, allora non so perchè mi restituisce sempre 1..Originariamente inviato da Scara95
La funzione è corretta, se vuoi esserne sicuro prova a fare i passaggi a mano!
Ecco la funzione:
codice:int campionati_pilota(TTree tree, char pilota[]){ if(tree==NULL){ return 0; } return (campionati_pilota(tree->left, pilota) + campionati_pilota(tree->right, pilota) + (!strcmp(tree->info.satellite.pilota, pilota))? 1 : 0); }
Sei stato attento che magari il numero di occorrenze per quel pilota non sia proprio 1?
Altrimenti posta il codice di inserimento e le strutture...
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
Le funzioni di inserimento e visualizzazione funzionano. Le ho testate. Se inserisco 2 campionati vinti dallo stesso pilota, mi restituisce 1, anzichè 2.Originariamente inviato da Scara95
Sei stato attento che magari il numero di occorrenze per quel pilota non sia proprio 1?
Altrimenti posta il codice di inserimento e le strutture...
La funzione la richiamo nel main così:
La struttura è questa:codice:printf("Inserisci cognome del pilota: "); scanf("%s", pilota); campionati_vinti=campionati_pilota(tree, pilota); printf("%d\n", campionati_vinti);
E non è scritta da me, ma era già fornita nella traccia (che è una prova d'esame).codice:struct SKey{ int value; }; typedef struct SKey TKey; struct SSat { char pilota[MAXLEN_PILOTA]; char team[MAXLEN_TEAM]; int vittorie_gp; }; typedef struct SSat TSat; struct SInfo{ TKey key; TSat satellite; }; typedef struct SInfo TInfo;
Prova così, con quella parentesi, ? : ha precedenza più bassa di +...codice:int campionati_pilota(TTree tree, char pilota[]){ if(tree==NULL){ return 0; } return (campionati_pilota(tree->left, pilota) + campionati_pilota(tree->right, pilota) + (!strcmp(tree->info.satellite.pilota, pilota) ? 1 : 0)); }
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
Ora funziona! Potresti spiegarmi cosa significa "? 1 : 0", non ho mai scritto una cosa del genere. Comunque grazie mille per la pazienza e l'aiuto!Originariamente inviato da Scara95
Prova così, con quella parentesi, ? : ha precedenza più bassa di +...codice:int campionati_pilota(TTree tree, char pilota[]){ if(tree==NULL){ return 0; } return (campionati_pilota(tree->left, pilota) + campionati_pilota(tree->right, pilota) + (!strcmp(tree->info.satellite.pilota, pilota) ? 1 : 0)); }![]()
test ? risultato1 : risultato2
test è un'equazione bolena.
se test è true l'espressione ritorna risultato1
se test è false l'espressione ritorna risultato2
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
Tutto chiaro, grazie ancora!Originariamente inviato da Scara95
test ? risultato1 : risultato2
test è un'equazione bolena.
se test è true l'espressione ritorna risultato1
se test è false l'espressione ritorna risultato2![]()
Prego![]()
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares