Stavo lavorando a questo softwerino che mi è stato assegnato come homework all'uni quando sono incappato in un errore proprio sul finire.
header
/*
* head.h
*
* Created on: 20/giu/2013
* Author: olivi_000
*/
#ifndef HEAD_H_
#define HEAD_H_
#include <iostream>
#include <string>
using namespace std;
//la classe elemento individua il singolo prodotto presente in magazzino
class elemento{
public:
//le funzioni di set permettono di MODIFICARE i parametri (membri privati) di ogni prodotto
void setName(const string &n){this->nome=n;};
void setId(int i){this->id=i;};
void setQuanti(int q){this->quanti=q;};
void setCosto(float c){this->costo=c;};
void setNota(const string &no){this->nota=no;};
//le funzioni di get permettono di CONOSCERE i parametri (membri privati) di ogni prodotto
string getName(){return nome;}
int getId(){return id;}
int getQuanti(){return quanti;}
float getCosto(){return costo;}
string getNota(){return nota;}
void print();
private:
int id;
string nome;
int quanti;
float costo;
string nota;
};
//carica il file .dat in un array di oggetti restituendone il puntatore al primo e la dimenzione dell'array
elemento* loading(int &dim);
//prende come parametri il puntatore all'array di oggetti e la dimenzione
void ricerca(elemento * lista,int);
void stampaInventario(elemento*lista);
//la funzione di salvataggio viene invocata alla fine di ogni modifica
void salva (elemento * lista,int);
//Apre in append il file .dat ed aggiunge un prodotto
void aggiungiProdotto();
#endif /* HEAD_H_ */
func.cpp
#include <iostream>
using namespace std;
#include "head.h"
#include <fstream>
#include <string>
//stampa un elemento
void elemento::print(){
cout<<"ID: "<<id<<endl;
cout<<"NOME: "<<nome<<endl;
cout<<"QUANTITA': "<<quanti<<endl;
cout<<"COSTO: "<<id<<endl;
cout<<"NOTA: "<<nota<<endl;
}
elemento* loading(int& dim) {
elemento *x;
x=new elemento[100];
dim=0;
int id;
string nome;
string dummy;
int quanti;
float costo;
string nota;
fstream f;
f.open("file.dat",ios::in);
while(!f.eof()){
f>>id;
getline(f, dummy);
getline(f, nome);
f>>quanti;
f>>costo;
getline(f, dummy);
getline(f, nota);
x[dim].setId(id);
x[dim].setName(nome);
x[dim].setQuanti(quanti);
x[dim].setCosto(costo);
x[dim].setNota(nota);
dim++;
}
f.close();
return x;
}
void ricerca(elemento * lista,int dim){
cout<<"Inserire l'ID dell prodotto da cercare: ";
int num;
cin>>num;
for(int i=0;i<dim;i++)
if (lista[i].getId()==num){
lista[i].print();
cout<<"Digitare \n\n1 per modificare\n2 per eliminare :";
int scelta;
cin>>scelta;
if(scelta==1){
cout<<"Digitare:"<<endl;
cout<<"\n1- per cambiare l'Id";
cout<<"\n2- per cambiare il nome";
cout<<"\n3- per cambiare la quantità";
cout<<"\n4- per cambiare il costo";
cout<<"\n5- per cambiare il commento";
int subscelta;
cin>>subscelta;
switch(subscelta){
case 1:
{cout<<"Inserire il nuovo Id: ";
int id;
cin>>id;
lista->setId(id);}
break;
case 2:
{cout<<"Inserire il nuovo Nome:";
string nNome;
getline(cin, nNome);
getline(cin, nNome);
lista->setName(nNome);
cout<<"Ok";}
break;
case 3:
{cout<<"Inserire la nuova quantità: ";
int quantit;
cin>>quantit;
lista->setQuanti(quantit);
break;}
case 4:
{cout<<"Inserire il nuovo costo: ";
int costo;
cin>>costo;
lista->setCosto(costo);
break;}
case 5:
{cout<<"Inserire il nuovo commento: ";
string commento;
getline(cin,commento);
getline(cin,commento);
lista->setNota(commento);
cout<<commento;
break;}
}
cout<<"\nModifica eseguita ...";
}
else if(scelta==2)
cout<<"Elemento cancellato";
}
else cout<<"Elemento non trovato";
}
void salva(elemento * lista,int dim){
ofstream out;
out.open("file.dat",ios::out);
for (int i=0;i<dim;i++){
out<<lista[i].getId()<<endl;
out<<lista[i].getName()<<endl;
out<<lista[i].getQuanti()<<endl;
out<<lista[i].getCosto()<<endl;
out<<lista[i].getNota()<<endl;
}
out.close();
}
void aggiungiProdotto(){
fstream f;
f.open("file.dat",ios::app);
int id;
string nome;
int quanti;
float costo;
string nota;
cout<<"Inserire il nuovo Id: ";
cin>>id;
cout<<"Inserire il nuovo Nome:";
getline(cin, nome);
getline(cin, nome);
cout<<"Inserire la nuova quantità: ";
cin>>quanti;
cout<<"Inserire il nuovo costo: ";
cin>>costo;
cout<<"Inserire il nuovo commento: ";
getline(cin,nota);
getline(cin,nota);
f<<id<<endl;
f<<nome<<endl;
f<<quanti<<endl;
f<<costo<<endl;
f<<nota<<endl;
f.close();
}
main
//============================================================================
// Name : Labcode.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
#include "head.h"
#include <fstream>
#include <string>
int main() {
elemento * lista;
int dim;
lista=loading(dim);
bool fine=false;
while (!fine){
cout<<"\nSelezionare l'opzione desiderata: \n";
cout<<"1- stampa la lista dei prodotti\n";
cout<<"2- ricerca prodotto\n";
cout<<"3- aggiungi prodotto\n";
cout<<"4- esci\n";
int scelta;
cin>>scelta;
switch(scelta){
case 1: cout<<"\nLista prodotti:\n";
for(int i=0;i<dim;i++)
lista[i].print();
cout<<"|----------|"<<endl;
break;
case 2: cout<<"\nRicerca prodotti:\n";
ricerca(lista,dim);
break;
case 3:aggiungiProdotto();
break;
case 4: fine=true;
break;
}
salva(lista,dim);
}
return 0;
}
l'errore si ha quando nella scelta del menu seleziono 1 e mi dovrebbe stampare tutti gli elementi presenti nel file .dat che nel mio caso dobrebbe essere una cosa del genere
1
martello
12
5.80
nessun commento
2
cacciavite
5
5.50
in esaurimento
la funzione andava bene, stampava correttamente, ma poi ho fatto qualche modifica (non mi pare proprio in quella parte di codice ma cmq...) ed ora mi stampa indirizzi di memoria, come se ci fosse qualche errore sui puntatori. non riesco proprio a trovare quest'errore, non ho mai usato il debugger forse potrebbe aiutarmi? io uso eclipse