¿Cadena de caracteres con espacios?

Hola, necesito que un programa en C++ lea una cadena de caracteres pero con espacios en blanco, se que se puede hacer con cin.getline(cadena,cantidad) y de hecho me funciona en la función main pero no sirve en ninguna otra función, pasa derecho hasta el siguiente comando.

2 respuestas

Calificación
  • hace 1 década
    Respuesta preferida

    Eso pasa porque algunas operaciones de entrada (como cin) dejan el caracter de nueva línea ('\n') en el buffer y eso hace que el siguiente cin.getline lo lea como si lo acabaras de introducir. Lo que tienes que hacer es esto: si antes de un getline usaste un cin, antes de ejecutar getline debes llamar a la función cin.ignore(n, delim). Esta función extrae (y descarta) del buffer de entrada hasta n caracteres, o hasta encontrar el caracter delim. Por ejemplo, cin.ignore(100, '\n') va a "limpiar" el buffer hasta que encuentre el caracter '\n', o hasta que haya extraído 100 caracteres, lo que pase primero. O en tu caso, como lo que quieres limpiar es únicamente el caracter de nueva línea que cin deja, puedes usar la versión de ignore sin parámetros, que lee un caracter:

    int edad;

    double sueldo;

    char nombre[50], domicilio[50];

    cin >> edad;

    cin >> sueldo;

    ...

    // Como sigue un getline y la última oper. de entrada fue un cin >>, hay que limpiar el '\n'

    cin.ignore();

    cin.getline(nombre, 50);

    cin.getline(domicilio, 50);

  • hace 1 década

    tienes que declarar una cadena de caracteres mas larga algo asi

    char variable[longitud de la cadena de caracteres]

    y puedes usar el cin>>variable; si no me equivico o trata con cin.get(variable,long)

    char nombre[25];

    cin.getline[variable,25];

    o si no funciona el cin.getline con cin.get o simplemente con cin .... lo importante es declarar la longitud de la cadena

¿Aún tienes preguntas? Pregunta ahora para obtener respuestas.