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!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.