Ayuda con función cin.getline C++

publicado por: Anonymous

Saludos.

Tengo un problema con el siguiente código de C++

#include <iostream>
#include <cstdlib>

using namespace std;

int main () {

    int n;

    cout << "Ingrese la cantidad de valores a procesar: ";
    cin >> n;

    char nombre[n][500];

    for (int i = 0; i < n; i++) {
        cout << "Escriba el nombre: ";
        cin.getline(nombre[i], 500);
    }

    for (int j = 0; j < n; j++) {
        cout << "nEl valor ingresado es: " << nombre[j];
    }

    return 0;
}

Cuando le doy un valor fijo al subíndice del arreglo de cadenas, no tengo problema para ingresar y mostrar los nombres al programa; pero cuando no especifico el valor y lo tomo de la variable “n”, el ciclo FOR solamente me muestra la salida “Escriba el nombre” e inmediatamente se sale del ciclo.

¿Alguien sabe a que se debe?

Gracias!

solución

Intenta agregando esta línea luego de leer n:

cin >> n;
cin.ignore(); 

Esto es por la manera que trabajan cin >> y cin.getline.

Cuando asignas un valor de esa manera, en la entrada también se queda pendiente (buffer) el caracter de cambio de línea Enter.

La función cin.getline lee la entrada hasta que se encuentra con el caracter de cambio de línea (por defecto), pero a diferencia de cin >> no lo deja en la entrada.

Entonces lo que ocurre en tu código es que cuando es el turno de ejecutar cin.getline la primera vez, lo que encuentra es un cambio de línea e ingresa un nombre en blanco.

cin.ignore() indica a la entrada que descarte lo que tenga pendiente, así no hay conflicto.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *