PDA

Visualizza la versione completa : [C++] Caricare più stringhe su file


AngeloV
09-12-2011, 20:49
Sto cercando di creare un oggetto che contenga all'interno un inventario con i seguenti campi:
NUMERO: che indica il numero del catalogo
NOME: indica il nome dell'oggetto (che è formato anche da due o più nomi)
altre cose...
NOTE: che è una frase descrittiva dell'oggetto

Come faccio quindi a caricare da INPUT una frase? E di conseguenza metterla su file?

oregon
09-12-2011, 20:57
Mi sa che hai fatto troppe domande ... devi proporre del codice scritto da te e fare una domanda su un particolare problema ...

Per capirci ... hai già scritto la classe?

AngeloV
09-12-2011, 21:13
si, non ho scritto il codice perchè vorrei più sapere che tecnica usare... però ora ve lo posto

ferramenta.h

#ifndef FERRAMENTA_H_
#define FERRAMENTA_H_
#include <iostream>
#include <fstream>
#include <cassert>
#include <string>

using namespace std;

class Ferramenta{
public:
void scriviFile(); //leggo da file
void scrivi(); //scrivi un record

private:
int numero; //indica il numero nell'inventario
string NomeAttrezzo;
int quantita;
float costo;
string note;
};

typedef Ferramenta Catalogo[100]; //indica il numero nell'inventario

#endif /* FERRAMENTA_H_ */


ferramenta.cpp

#include "ferramenta.h"

void Ferramenta::scriviFile(){ //scrivo su file
fstream f;
f.open("hardware.dat", ios::out);
if(!f){
cout<<"Non posso creare il file!!!\n";
assert(!f);
}else{
f<<"Numero: " <<numero <<endl;
f<<"NomeAttrezzo: " <<NomeAttrezzo <<endl;
f<<"Quantità: " <<quantita <<endl;
f<<"Costo: " <<costo <<endl;
f<<"Note: " <<note <<endl;
}

f.close();
}

void Ferramenta::scrivi(){ //scrivi un record
cout<<"Scrivi il record:\n";
cout<<"Numero: "; cin>>numero;
cout<<"NomeAttrezzo: "; cin>>NomeAttrezzo;
cout<<"Quantità: "; cin>>quantita;
cout<<"Costo: "; cin>>costo;
cout<<"Note: "; cin>>note;
}

main.cpp

#include "ferramenta.h"

int main(){
Catalogo cat; //dichiaro un catalogo di 100 posizioni


for (int i=0;i<2;i++){
cat[i].scrivi();
cat[i].scriviFile();
}

return 0;
}

oregon
09-12-2011, 23:41
Dato il codice, di quale tecnica parli? Quale problema in particolare?

AngeloV
10-12-2011, 10:55
Non so come poter scrivere in input una frase e salvarla in una variabile, in seguito la dovrei portare su file

oregon
10-12-2011, 11:06
Originariamente inviato da AngeloV
Non so come poter scrivere in input una frase e salvarla in una variabile

Sono elementi di base di C/C++ ... come mai scrivi classi e non sai come fare un input da tastiera? E' come avere costruito una automobile e chiedere come si avvita un bullone ...

Guarda la funzione

gets
http://www.cplusplus.com/reference/clibrary/cstdio/gets/

e usala.


in seguito la dovrei portare su file

Ma lo hai già scritto il codice !

f.open("hardware.dat", ios::out);

...

AngeloV
10-12-2011, 11:23
Ho provato a utilizzare gets in due modi:

1)

nel main



string ciao;
gets(ciao);
cout<<ciao;


tutto bene, mi dà tutta la stringa con spazi.

2)Ho provato a metterlo nel codice della classe



cout<<"Nome Attrezzo: "; gets(NomeAttrezzo);
cout<<"Quantita: "....


quando eseguo, mi esce il cout dell'Attrezzo ma non mi fa inserire da input la stringa e passa subito all'inserimento dell'intero successivo

AngeloV
10-12-2011, 14:24
ci sono riuscito


getline(cin,note,'\t');

ho utilizzato la casse STRING e questo codice che fino al tasto TAB continua a leggere la stringa. Ora devo solo capire come prendere da file tale stringa

oregon
10-12-2011, 14:26
Dopo l'input del numero devi ripulire il buffer con

cin.ignore();

AngeloV
10-12-2011, 17:16
dato il mio file scritto così:



1
NomeAttrezzo:
serve per
Quantità:
2
Costo:
2
Note:
utile per


come faccio a prendere le stringhe "serve per..." e "utile per.." supponeno che sono frasi??

stavo provando a scrivere così...



void Ferramenta::leggiFile(){ //leggo da file
fstream f;
f.open("hardware.dat", ios::in);
if(!f){
cout<<"Non posso leggere il file!!!\n";
assert(!f);
}else{
string appoggio;

f>>numero;
f>>appoggio;
f.getline(NomeAttrezzo,256,'\n');
}

f.close();
}

Loading