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: