Oppure

Loading
01/02/13 16:28
Majesticeagle
Salve a tutti,
ho realizzato un piccolo programmino in c++ dove salvo in un file dei nomi e poi li stampo (sto ancora imparando come gestire bene i file). Il problema è che vorrei scrivere questi file uno sotto l'altro così che quando vado a stamparli me li stampa uno sotto l'altro. Ho adottato questa soluzione:
void Aggiungi()
{
string nome;
ofstream fout("nomi.dat", ios::app);	//Apre il file in scrittura
cout<<"Testo: ";
cin>>nome;
fout<<nome<<endl;		//Scrive sul file
fout.close();			//Chiude il file
}


Per stampare ho scritto questa funzione:
void Visualizza()
{
string nome;
ifstream fin("nomi.dat");	//Apre il file in lettura
while(fin>>nome)
{	cout<<nome;
}
fin.close();			//Chiude il file
}


In realtà, quando vado a stampare, mi stampa tutti i nomi uno dietro l'altro! Per esempio: antoniolucadavide
Come posso risolvere?
Grazie!:(
Ultima modifica effettuata da Majesticeagle 01/02/13 16:29
aaa
01/02/13 17:25
nessuno
Andare a capo?

cout << nome << endl;

Prima della gestione dei file dovresti studiare meglio le basi dell'I/O
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
01/02/13 17:40
Saik
utilizzando solo infile << nome il programma smette di leggere non appena trova uno spazio o un carattere a capo(come in questo caso) quindi questo carattere viene letto e scartato :D per risolvere puoi utilizzare la soluzione di nessuno oppure puoi anche utilizzare la funzione infile.get();
aaa
02/02/13 17:51
LittleHacker
Postato originariamente da Saik:

utilizzando solo infile << nome il programma smette di leggere non appena trova uno spazio o un carattere a capo(come in questo caso) quindi questo carattere viene letto e scartato :D per risolvere puoi utilizzare la soluzione di nessuno oppure puoi anche utilizzare la funzione infile.get();


Potresti fare una cosa del genere:

void Visualizza()
{
string nome, files_read; //Modificato
ifstream fin("nomi.dat");       //Apre il file in lettura
while(fin>>nome)
{      
     files_read += nome + "\n"; //Modificato
}
cout<<files_read; //Modificato
fin.close();                    //Chiude il file

return 0;
}

:k:
aaa
03/02/13 15:01
Majesticeagle
Il problema del mandare a capo quando stampo l'ho risolto con la soluzione di LittleHacker. Grazie mille!

Un'altra cosa.... Quando vado a far inserire il nome (di tipo stringa) dovrebbe prendermi anche gli spazzi, ma in realtà quando va a scrivere sul file si interrompe al primo spazio e scrive solo la prima parola. Si può risolvere?
aaa
03/02/13 15:13
Saik
Si invece di usare cin << usa cin.getline
aaa
07/02/13 11:19
Majesticeagle
Non me lo fa inserire con cin.getline!!!! Mi stampa "Nome: " e poi dovrei inserire il nome, e invece torna al menù!
aaa
07/02/13 13:13
Poggi Marco
aaa