PDA

View Full Version : [C++] Cin >> stringa, si ferma al primo spazio


agente mm8
27-11-2009, 15:05
Salve a tutti.
Ho fatto una ricerca sul forum, ma non ho trovato niente... o nessuno ne a mai avuto bisogno (cosa molto poco probabile) o sono io che sono niubbo :stordita:
Il problema è quando uso cin per prendere in input una stringa. Se essa contiene spazi, tipo "Ciao, amico!" viene memorizzato solo "Ciao,". Come posso fare per recuperare tutta la stringa?

||ElChE||88
27-11-2009, 15:10
string str;

getline(cin, str);

bottomap
27-11-2009, 15:12
Ciao,

Lo spazio è considerato separatore di parametro, per questo "Ciao, amico" la rileggi sono con due cin successive (stesso comportamento della scanf, per intenderci).

Per aggirare il problema dovresti usare la cin.getLine(); che si ferma all'invio (\n) o eventualmente ad un altro carattere che puoi specificare come delimitatore. La funzione prende in input un buffer, la sua dimensione (al più legge N caratteri) ed opzionalmente un char che indica il delimitatore.

Edit: Ops, crossposting... nota che io ho proposto questa: http://www.cplusplus.com/reference/iostream/istream/getline/ che lavora su un char[], mentre Elche ha proposto questa: http://www.cplusplus.com/reference/string/getline/ che lavora con una std::string... hai l'imbarazzo della scelta. In ogni caso entrambe fanno quello che chiedi.

Ciaociao :)

agente mm8
27-11-2009, 15:15
Grazie mille a tutti, provo e vi faccio sapere :)

~F e l e
27-11-2009, 15:21
io conosco 2 soluzioni al tuo problema...

la prima

string stringa;
getline (cin, stringa);


la seconda:

char buffer[256];
cin.getline(buffer,sizeof(buffer));


io comunque ti consiglio la prima... è più facile da ricordare...

agente mm8
27-11-2009, 19:41
Hmm... ho fatto un codice di esempio con getline e funge, nel mio no T_T
Vabbé, avrò sbagliato sicuramente qualcosa. Vado a controllare... grazie per l'aiuto!