PDA

Visualizza la versione completa : [C++] Acquisizione stringhe


No_Rules
29-07-2010, 23:28
Ragazzi ho un problema per me grave, nell'acquisizione di stringhe di caratteri tramite getline().

Questa è la funzione che sto utilizzando, è membro di una classe in cui sono dichiarati tutti questi attributi come array di caratteri. (per esempio char nome[15];)



void tessera::set_tessera(){

system("CLS");
cout<<"Creazione nuova tessera utente"<< endl<< endl;
cout<<"id lettore: "<< id << endl;
cout<<"nome: ";
cin.getline(nome,15,'\n');
cout<<"cognome: ";
cin>> cognome;
cout<< "codice fiscale: ";
cin>> codfis;
cout<< "tel: ";
cin>> tel;
cout<< "indirizzo: ";
cin>>indirizzo;
cout<< "citta': ";
cin>>citta;
cout<< "n. documento di identita': ";
cin>>doc;
system("CLS");

}


Siccome mi serve acquisire le stringhe con gli spazi ho provato ad usare la cin.getline(), vedi scritta in rosso, il problema è però che in output mi stampa nome e cognome di seguito, così:

"nome: cognome: "

Non riesco a capire perché? Se uso la cin>> normale va tutto bene, però ho necessita di acquisire la stringa con gli spazi, ho provato anche a crearmi una funzione mia, ma il risultato è lo stesso...

Aiutatemi, Grazie

Doch88
30-07-2010, 18:42
prova a sostituire cin.getline con gets(stringa), o con fgets(stringa, stdin) che è più sicuro...

Alex'87
30-07-2010, 18:47
Originariamente inviato da No_Rules }
[/code]

Siccome mi serve acquisire le stringhe con gli spazi ho provato ad usare la cin.getline(), vedi scritta in rosso, il problema è però che in output mi stampa nome e cognome di seguito, così:

"nome: cognome: "
:master: Prova a mettere un cin.flush() prima di chiedere l'input all'utente :master:

No_Rules
31-07-2010, 13:39
Originariamente inviato da Doch88
prova a sostituire cin.getline con gets(stringa), o con fgets(stringa, stdin) che è più sicuro...

con gets(stringa) il problema nell'output rimane, con fgets(string, stdin) mi da questo errore:

error C2660: 'fgets' : function does not take 2 parameters



Originariamente inviato da Alex'87
:master: Prova a mettere un cin.flush() prima di chiedere l'input all'utente :master:

Ho pensato la stessa cosa ma come mai quando inserisco cin.flush mi da questo errore:

error C2039: 'flush' : is not a member of 'basic_istream<char,struct std::char_traits<char> >'


Grazie ad entrambi

Alex'87
31-07-2010, 13:49
Originariamente inviato da No_Rules

Ho pensato la stessa cosa ma come mai quando inserisco cin.flush mi da questo errore:

error C2039: 'flush' : is not a member of 'basic_istream<char,struct std::char_traits<char> >'
Prova a leggere questa discussione (http://www.velocityreviews.com/forums/t286455-clearing-input-buffer.html), potrebbe esserti d'aiuto :master:

No_Rules
31-07-2010, 14:07
Originariamente inviato da Alex'87
Prova a leggere questa discussione (http://www.velocityreviews.com/forums/t286455-clearing-input-buffer.html), potrebbe esserti d'aiuto :master:

Perfetto, ho letto la discussione che mi hai consigliato.

Ho inserito cin.ignore(), che conoscevo già ma non avevo mai usato per questo, evidentemente nel buffer c'era un '\n' che mi faceva scattare subito l'altra cout<<

Grazie mille ;)

Loading