std :: input cin con spazi?

#include  std::string input; std::cin >> input; 

L’utente vuole inserire “Hello World”. Ma il cin non funziona nello spazio tra le due parole. Come posso fare in modo che il cin si cin di Hello World ?

In realtà sto facendo questo con le strutture e cin.getline non sembra funzionare. Ecco il mio codice:

 struct cd { std::string CDTitle[50]; std::string Artist[50]; int number_of_songs[50]; }; std::cin.getline(library.number_of_songs[libNumber], 250); 

Questo produce un errore. Qualche idea?

Devi usare cin.getline() :

 char input[100]; cin.getline(input,sizeof(input)); 

Non “fallisce”; smette solo di leggere. Vede un token lessicale come una “stringa”.

Usa std::getline :

 int main() { std::string name, title; std::cout << "Enter your name: "; std::getline(std::cin, name); std::cout << "Enter your favourite movie: "; std::getline(std::cin, title); std::cout << name << "'s favourite movie is " << title; } 

Si noti che questo non è lo stesso di std::istream::getline , che funziona con i char buffer in stile C piuttosto che con std::string s.

Aggiornare

La tua domanda modificata ha poca somiglianza con l'originale.

getline tentando di getline una getline in un int , non in una stringa o in un buffer di caratteri. Le operazioni di formattazione dei flussi funzionano solo con l' operator<< e l' operator>> . O usate uno di essi (e modificate di conseguenza per l'immissione di più parole), o usate la linea di getline e convertite lessicale in int dopo il fatto.

Uso :

 getline(cin, input); 

la funzione può essere trovata in

 #include  

Vuoi usare la funzione .getline in cin.

 #include  using namespace std; int main () { char name[256], title[256]; cout << "Enter your name: "; cin.getline (name,256); cout << "Enter your favourite movie: "; cin.getline (title,256); cout << name << "'s favourite movie is " << title; return 0; } 

Ho preso l'esempio da qui . Controllalo per maggiori informazioni ed esempi.

La libreria standard fornisce una funzione di input chiamata ws , che consuma spazi bianchi da un stream di input. Puoi usarlo in questo modo:

 std::string s; std::getline(std::cin >> std::ws, s); 

IL MODO

È ansible utilizzare la funzione gets trovata in cstdio (stdio.h in c):

 #include int main(){ char name[256]; gets(name); // for input puts(name);// for printing } 

IL MODO C ++

gets viene rimosso in c ++ 11.

[Consigliato]: Puoi usare getline (cin, name) che si trova in string.h o cin.getline (name, 256) che si trova in iostream stesso.

 #include #include using namespace std; int main(){ char name1[256]; string name2; cin.getline(name1,256); // for input getline(cin,name2); // for input cout< 

Questa è una vecchia domanda, ma qualcuno può dirmi se la mia soluzione non è corretta:

 std::string s, temp; std::stringstream ss; while(std::cin>>temp){ ss<