std :: cin entrada con espacios?

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

El usuario quiere ingresar a “Hola mundo”. Pero cin falla en el espacio entre las dos palabras. ¿Cómo puedo hacer cin en todo Hello World ?

De hecho, estoy haciendo esto con structs y cin.getline no parece funcionar. Aquí está mi código:

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

Esto produce un error. ¿Algunas ideas?

Tienes que usar cin.getline() :

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

No “falla”; simplemente deja de leer. Ve un token léxico como una “cadena”.

Use 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; } 

Tenga en cuenta que esto no es lo mismo que std::istream::getline , que funciona con búferes de caracteres C en lugar de std::string s.

Actualizar

Su pregunta editada tiene poco parecido con el original.

Intentabas poner la línea en un int , no en un buffer de cadena o caracteres. Las operaciones de formateo de flujos solo funcionan con el operator<< y el operator>> . Utilice uno de ellos (y modifique según corresponda para la entrada de varias palabras), o use getline y léxicamente convierta a int después de los hechos.

Utilizar :

 getline(cin, input); 

la función se puede encontrar en

 #include  

Desea utilizar la función .getline en 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; } 

Tomó el ejemplo de aquí . Compruébelo para obtener más información y ejemplos.

La biblioteca estándar proporciona una función de entrada llamada ws , que consume espacios en blanco de una secuencia de entrada. Puedes usarlo así:

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

EL CAMINO C

Puede usar la función gets encontrada en cstdio (stdio.h en c):

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

EL CAMINO C ++

gets se elimina en c ++ 11.

[Recomendado]: puede usar getline (cin, nombre) que está en string.h o cin.getline (nombre, 256) que está en iostream .

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

Esta es una vieja pregunta, pero ¿alguien me puede decir si mi solución es incorrecta?

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