[QUOTE]Originariamente inviato da blackcat90
Comunque, io avevo pensato che l'errore sta nell' utilizzare le string, che sono classi la cui dimensione non è fissata a priori, in un record che nel file ad accesso diretto deve avere una dimensione fissa. Mi dite se questo ragionamento è corretto?
[QUOTE]
Si.
In realtà non è la std::string il problema. Il problema sono le istruzioni cin >> qualcosa che non tolgono il carattere [n]\n[/b] alla fine. Questo rimane nel buffer e la getline pensa che l'input sia già finito.Inoltre mi spiegate perchè getline(cin,string) non mi permette di inserire la stringa? Io la devo inserire in un record istanziato all'interno della funzione, quindi la lunghezza fissa del record non c'entra in questo caso...
Per la cronaca, cin è sempre stato una rogna da gestire bene.
codice:Record tool; cout << "\nInserisci numero identificativo attrezzo: "; cin >> tool.n_id; cin.sync(); // risicronizza il buffer interno e toglie il carattere '\n' rimasto. cout << "Inserisci nome: "; std::string line; // getline acquisisce anche gli spazi e scarta lo \n che rimarrebbe nel buffer di input getline(cin,line); memset(tool.nome,0,MAX_NOME); strncpy(tool.nome,line.c_str(),std::min<int>(line.size(),MAX_NOME-1)); cout << "Inserisci quantita': "; cin >> tool.qnt; cin.sync(); cout << "Inserisci costo: "; cin >> tool.costo; cin.sync(); cout << "Inserisci note: ";

 
			
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando