#include <string>
std::string input;
std::cin >> input;
El usuario quiere ingresar "Hello World". Pero cinfalla en el espacio entre las dos palabras. ¿Cómo puedo hacer una cintoma de todo Hello World?
De hecho, estoy haciendo esto con estructuras y cin.getlineno 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?

librarypor lo que es claro que es del tipocdgetlineingresar a unint. Por supuesto que falla.Respuestas:
Tienes que usar
cin.getline():fuente
char-buffers? Es 2011.cin.getline(input, sizeof(input));? Además, ¿no debería verificar el estado de devolución?sizeof(input)en lugar de 100 en la llamada acin.getline(); eso significaría que puede cambiar el tamaño del búfer de entrada y solo necesita cambiar una línea en lugar de dos líneas. El cambio 2 sería probar el retornocin.getline()utilizando, por ejemplo,if (!cin.getline(input, sizeof(input))) { ...handle EOF or error... }o algo similar, para recordarle al OP que las operaciones de entrada, en particular, son vulnerables a comportamientos inesperados. Otras respuestas también necesitan esto.No "falla"; solo deja de leer. Ve una ficha léxica como una "cadena".
Uso
std::getline:Tenga en cuenta que esto no es lo mismo que
std::istream::getline, que funciona concharbuffers de estilo C en lugar destd::strings.Actualizar
Su pregunta editada se parece poco al original.
Intentabas
getlineingresar a unintbúfer de caracteres o cadenas. Las operaciones de formateo de secuencias solo funcionan conoperator<<yoperator>>. Utilice uno de ellos (y ajuste en consecuencia para la entrada de varias palabras), o utilicegetliney convierta léxicamente aintposteriori.fuente
getlinepuede incluir la nueva línea de terminación en la cadena que devuelve. Si es así, depende de usted eliminarlo.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í:fuente
std::getline(std::cin, s)me pondría muy desordenado y diría que la entrada interrumpida al esperar entradas en unwhile/forloop. ¡Esta opción resolvió mi problema!Utilizar :
la función se puede encontrar en
fuente
cin.getlineno existe en su sistema, ha hecho algo muy mal. Lo más probable es que pasaras los argumentos equivocados. Es mejor no culpar a otros por tus errores ...Desea utilizar la función .getline en cin.
Tomé el ejemplo de aquí . Compruébalo para más información y ejemplos.
fuente
getline. Está pasado de moda. Use freegetlineen su lugar, que se puede usar constd::string. [Por cierto, cplusplus.com no es un recurso recomendado]EL CAMINO C
Puede usar la
getsfunción que se encuentra en cstdio (stdio.h en c):EL CAMINO C ++
getsse elimina en c ++ 11.[Recomendado]: puede usar getline (cin, nombre) que está en
string.ho cin.getline (nombre, 256) que está eniostreamsí mismo.fuente
getses imposible de usar de forma segura. Incluso se ha eliminado por completo en C11.Prefiero utilizar el siguiente método para obtener la entrada:
En realidad, es muy fácil de usar en lugar de definir la longitud total de la matriz para una cadena que contiene un carácter de espacio.
fuente