Buonasera ragazzi. Sono alle prese con un esercizio sui file e avrei bisogno di una mano per risolvere un piccolo bug. La traccia è questa: da un elenco di record (char codice, char nome_prodotto, int mese, float prezzo) precedentemente scritti su file txt, prendere l'elenco più piccolo possibile di prodotti acquistabili da un budget inserito dall'utente. Tale elenco sarà stampato su un secondo file txt, ordinato numericamente in base al campo mese.
Ho creato quindi due strutture, una per leggere i record dal primo txt e l'altra per creare il nuovo elenco di prodotti e stamparlo sul nuovo txt.
typedef struct{
char codice[6];
char nome[15];
int mese;
float prezzo;
}record;
record frutta[MAX];
record newFrutta[MAX];
Dopo aver preso i dati in memoria, usando la struttura frutta li ho ordinati in maniera decrescente in base al prezzo per poi selezionare come nel codice seguente i record inserendoli in newFrutta. Per velocità, ho preinserito la scelta dell'utente.
float scelta=3.00;
int conta=0;
for(int counter=0; counter<indice; counter++){
if(frutta[counter].prezzo<=scelta){
newFrutta[counter]=frutta[counter];
scelta=scelta-frutta[counter].prezzo;
conta++;
}
}
Tale algoritmo sembra funzionare ma quando vado a stampare l'elenco a schermo in questo modo
for(int x=0; x<conta; x++){
printf("%s %s %d %.2f\n", newFrutta[x].codice, newFrutta[x].nome, newFrutta[x].mese, newFrutta[x].prezzo);
}
mi stampa il primo record come vuoto, cioè degli zeri, poi stampa gli altri correttamente e omette l'ultimo.
Il bello è che tale errore avviene solo se il valore che dovrebbe inserire l'utente è inferiore al 5, al di sopra del quale tutto funziona benissimo. Aiutatemi a capire dove sbaglio per favore.