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...
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";
}
Per favore aiutatemi :118: