Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problemi con i file in scrittura e lettura
Forum - C/C++ - Problemi con i file in scrittura e lettura

Avatar
Majesticeagle (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/02/2012

Segnala al moderatore
Postato alle 17:28
Venerdì, 01/02/2013
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:
Codice sorgente - presumibilmente Delphi

  1. void Aggiungi()
  2. {
  3. string nome;
  4. ofstream fout("nomi.dat", ios::app);    //Apre il file in scrittura
  5. cout<<"Testo: ";
  6. cin>>nome;
  7. fout<<nome<<endl;               //Scrive sul file
  8. fout.close();                   //Chiude il file
  9. }


Per stampare ho scritto questa funzione:
Codice sorgente - presumibilmente Delphi

  1. void Visualizza()
  2. {
  3. string nome;
  4. ifstream fin("nomi.dat");       //Apre il file in lettura
  5. while(fin>>nome)
  6. {       cout<<nome;
  7. }
  8. fin.close();                    //Chiude il file
  9. }


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 il 01/02/2013 alle 17:29
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:25
Venerdì, 01/02/2013
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à.
PM Quote
Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 18:40
Venerdì, 01/02/2013
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();

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 18:51
Sabato, 02/02/2013
Testo quotato

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:

Codice sorgente - presumibilmente Delphi

  1. void Visualizza()
  2. {
  3. string nome, files_read; //Modificato
  4. ifstream fin("nomi.dat");       //Apre il file in lettura
  5. while(fin>>nome)
  6. {      
  7.      files_read += nome + "\n"; //Modificato
  8. }
  9. cout<<files_read; //Modificato
  10. fin.close();                    //Chiude il file
  11.  
  12. return 0;
  13. }


:k:

PM Quote
Avatar
Majesticeagle (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/02/2012

Segnala al moderatore
Postato alle 16:01
Domenica, 03/02/2013
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?

PM Quote
Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 16:13
Domenica, 03/02/2013
Si invece di usare cin << usa cin.getline

PM Quote
Avatar
Majesticeagle (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/02/2012

Segnala al moderatore
Postato alle 12:19
Giovedì, 07/02/2013
Non me lo fa inserire con cin.getline!!!! Mi stampa "Nome: " e poi dovrei inserire il nome, e invece torna al menù!

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 14:13
Giovedì, 07/02/2013

PM Quote