Ciao, ho un problema nell'inserimento e nella visualizzazione di dati da un file ad accesso diretto. In pratica quando visualizzo i dati il programma va in errore logico(non sempre). A volte mi visualizza gli stessi dati due volte.
Inoltre la funzione getline(cin, tool.note) non mi fa inserire la stringa e salta l'istruzione. Riporto il codice:
codice:/* * ferramenta.h * * */ #ifndef FERRAMENTA_H_ #define FERRAMENTA_H_ #include <string> using std::string; struct Record{ int n_id; string nome; int qnt; float costo; string note; }; void inizializza_file(char*); void inserisci_attrezzo(char*); void leggi_attrezzi(char*); etc...Per favore aiutatemi :118:codice:/* * ferramenta.cpp * * */ #include <iostream> #include <fstream> #include <string> #include <iomanip> #include "ferramenta.h" using namespace std; void inizializza_file(char* name1){ Record empty={0, "", 0, 0.0, ""}; ofstream f(name1, ios::out); if(!f){ cout << "\nIl file non e' stato creato!\n"; return; } for(int i=0;i<100;i++) f.write(reinterpret_cast<const char*>(&empty), sizeof(Record)); f.close(); } void inserisci_attrezzo(char* name1){ Record tool; cout << "\nInserisci numero identificativo attrezzo: "; cin >> tool.n_id; cout << "Inserisci nome (usa il carattere di linea per lo spazio): "; cin >> tool.nome; cout << "Inserisci quantita': "; cin >> tool.qnt; cout << "Inserisci costo: "; cin >> tool.costo; cout << "Inserisci note: "; getline(cin, tool.note); ofstream f(name1, ios::ate); if(!f){ cout << "\nIl file non e' stato aperto!\n"; return; } f.seekp((tool.n_id-1)*sizeof(Record)); f.write(reinterpret_cast<const char*>(&tool), sizeof(Record)); f.close(); } void leggi_attrezzi(char* name1){ Record object; cout << "\n\n" << setiosflags(ios::left) << setw(10) << "N. Record" << setw(25) << "Nome" << setw(10) << "Quantita'" << setw(10) << "Costo" << setw(50) << "Note"; ifstream f(name1, ios::in); if(!f){ cout << "\nIl file non e' stato aperto!\n"; return; } while(f && !f.eof()){ f.read(reinterpret_cast<char*>(&object), sizeof(Record)); if(object.n_id!=0) stampa_attrezzo(object); } f.close(); cout << "\n\n"; }

Rispondi quotando