2011-05-04 29 views
18

Estoy tratando de almacenar la entrada que ingresa el usuario a través de la consola. entonces necesito incluir "enter" y cualquier espacio en blanco.Leyendo una línea completa de entrada

Pero cin deja de darme entrada después del primer espacio.

¿Hay alguna manera de leer líneas enteras hasta presionar CTRL + Z, o algo así?

+0

duplicado posible. Mire http://stackoverflow.com/questions/2765462/how-to-cin-space-in-c – mkaes

+0

No encontré esta publicación mientras buscaba. si lo hiciera, publicaría otro ^^ lo siento, intentaré buscar más profundo la próxima vez – Katia

Respuesta

38

¿hay alguna manera como readLines hasta que se presione CTRL + Z o algo así?

Sí, precisamente, de esta manera, mediante el std::getline función libre (no el método del mismo nombre istream!):

string line; 

while (getline(cin, line)) { 
    // do something with the line 
} 

Esto permitirá la lectura líneas (incluyendo espacios en blanco, pero sin salto de línea que termina) desde la entrada hasta que se llega al final de la entrada o cin indica un error.

+0

así que si la entrada era como 5 líneas terminadas con CTRL + Z no importa lo que contenga la línea, irá a la variable de línea? ? cuando estaba tratando con anterioridad, la entrada a una variable de cadena no se almacena después de un espacio ... ¿es porque yo estaba usando cin not getline ?? – Katia

+1

@katia Solo 'getline' lee toda la línea. Si ingresas una cadena a través de 'cin >> line', entonces solo lee hasta el primer espacio en blanco. –

+0

Lo entiendo ahora, thx un millón :) – Katia

3
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
    string s; 
    while(getline(cin, s)) { 
     // do something with s 
    } 
} 
0

Para mi programa, escribí el siguiente bit de código que lee cada carácter de entrada hasta que se presiona ctrl + x. Aquí está el código:

char a; 
string b; 
while (a != 24) 
{ 
cin.get(a); 
b=b+a; 
} 
cout << b; 

Para Ctrl + Z, introduzca la siguiente:

char a; 
string b; 
while (a != 26) 
{ 
cin.get(a); 
b=b+a; 
} 
cout << b; 

No puedo confirmar que la solución ctr + z funciona, como estoy en una máquina UNIX, y ctrl + z mata el programa. Sin embargo, puede funcionar o no para Windows; Tendrás que ver por ti mismo.

+0

Está configurando su auto para desbordamientos de búfer, esto no es seguro en absoluto – thecoshman

-1
#include <string> 
#include <iostream> 

int main() 
{ 

    std::cout << "enter your name: "; 

    std::string name; 

    std::getline(std::cin, name); 

    return 0; 

} 
+1

¡Bienvenido a Stack Overflow! Aunque le agradecemos su respuesta, sería mejor si proporcionara un valor adicional además de las otras respuestas. En este caso, su respuesta no proporciona un valor adicional, ya que otro usuario ya publicó esa solución. Si una respuesta anterior fue útil para usted, debe votarla en lugar de repetir la misma información. –

0

Usted puede utilizar la función getline en C++

#include<iostream> 
using namespace std; 
int main() 
{ 
    char msg[100]; 
    cin.getline(msg,100); 
    return 0; 
} 
Cuestiones relacionadas