Ciao a tutti, ho risolto questo esercizio che mi era stato assegnato. La compilazione non da errori, ma ogni volta che il programma viene eseguito, va in crash e si chiude.. Non riesco davvero a capire di cosa si tratti, ci sono su da un po di tempo ma non ho mai capito il perchè. Ecco il materiale che vorrei farvi esaminare: (ah, uso il compilatore Orwell Dev C++ 5.6.2 su Windows 8)
main.cpp
codice:
#include <iostream>#include <fstream>
using namespace std;
struct Nodo
{
string ID;
int Qty;
struct Nodo * Next;
};
void Lista_Scorte(ifstream & Acquisti, ifstream & Prodotti, struct Nodo * Num_pezzi, struct Nodo * Num_venduti);
int Totale_Venduto(struct Nodo * Num_pezzi);
int main ()
{
ifstream Acquisti, Prodotti;
int Totale;
struct Nodo * Num_pezzi = NULL;
struct Nodo * Num_venduti = NULL;
Lista_Scorte(Acquisti, Prodotti, Num_pezzi, Num_venduti);
while (Num_pezzi != NULL)
cout <<Num_pezzi->ID <<" " <<Num_pezzi->Qty <<endl;
Totale = Totale_Venduto(Num_pezzi);
cout <<"Il totale dei pezzi venduti e': " <<Totale <<endl;
return 0;
}
void Lista_Scorte(ifstream & Acquisti, ifstream & Prodotti, struct Nodo * Num_pezzi, struct Nodo * Num_venduti)
{
string HaveRead;
int Pieces;
struct Nodo * TNum_pezzi = NULL;
struct Nodo * TNum_venduti = NULL;
TNum_pezzi = Num_pezzi;
TNum_venduti = Num_venduti;
Acquisti.open("Acquisti.txt");
Prodotti.open("Prodotti.txt");
if (!Acquisti && !Prodotti) return;
while (!Acquisti.eof())
{
getline(Acquisti, HaveRead, ' ');
TNum_venduti->ID = HaveRead;
Acquisti >> Pieces;
TNum_venduti->Qty = Pieces;
TNum_venduti->Next = new Nodo();
}
while (!Prodotti.eof())
{
getline(Prodotti, HaveRead, ' ');
TNum_pezzi->ID = HaveRead;
Prodotti >> Pieces;
TNum_pezzi->Qty = Pieces;
TNum_pezzi->Next = new Nodo();
}
Acquisti.close();
Prodotti.close();
TNum_pezzi = Num_pezzi;
TNum_venduti = Num_venduti;
while (TNum_venduti != NULL)
{
if (TNum_venduti->ID == TNum_pezzi->ID)
TNum_pezzi->Qty = TNum_pezzi->Qty - TNum_venduti->Qty;
TNum_venduti = TNum_venduti->Next;
TNum_pezzi = TNum_pezzi->Next;
}
delete TNum_pezzi;
delete TNum_venduti;
return;
}
int Totale_Venduto(struct Nodo * Num_pezzi)
{
int Sum = 0;
if (Num_pezzi != NULL)
return Sum = Sum + Num_pezzi->Qty + Totale_Venduto(Num_pezzi->Next);
else
return Sum;
}
Faccio uso di due file, da cui leggo per costruire le due liste "Num_pezzi" e "Num_venduti":
Prodotti.txt
codice:
ID_1 20
ID_2 0
ID_3 30
ID_4 0
ID_5 20
ID_6 0
ID_7 40
ID_8 0
Acquisti.txt
codice:
ID_1 5
ID_3 10
ID_5 8
ID_7 20
Vorrei potervi dire di più, ma non ho davvero idea di cosa si possa trattare.. vi prego aiutatemi, ci sto perdendo la testa su da troppo
Grazie a tutti!
P.s : Il problema si verifica nella function "Lista_Scorte".