fbpx

Responder a: Problema con cin y getline en C++ (salta entrada)

  • Angel Sánchez

    organizador
    12 septiembre, 2024 en 8:36 am

    El problema que estás experimentando en tu código tiene que ver con la manera en que cin y getline manejan el buffer de entrada. Cuando usas cin para leer un número (cin >> numeroEmpleado[i];), deja un carácter de nueva línea (‘\n’) en el buffer que no es consumido. Cuando luego llamas a getline, esta función intenta leer desde ese buffer y encuentra el carácter ‘\n’, lo que provoca que se salte la entrada de la cadena.

    Para evitar este comportamiento, puedes limpiar el buffer de entrada antes de llamar a getline. Esto se hace utilizando cin.ignore(), que descarta cualquier carácter sobrante en el buffer.

    Ejemplo:

    for(int i=0; i<3; i++){

    cout << "Digita el numero del empleado que deseas registrar: ";

    cin >> numeroEmpleado[i];

    // Limpiar el buffer antes de usar getline

    cin.ignore();

    cout << "Ingresa el primer nombre del empleado No. " << numeroEmpleado[i] << ": ";

    cin.getline(nombre, 15, '\n');

    nombreEmpleado[i] = nombre;

    cout << endl;

    }

    Explicación:

    cin.ignore();: Esto descarta el carácter ‘\n’ que queda en el buffer después de la entrada con cin. De este modo, getline funcionará correctamente y permitirá al usuario ingresar el nombre del empleado.

    Intenta hacer estos ajustes y el problema debería resolverse, permitiéndote ingresar tanto el número como el nombre sin que se salte ninguna entrada.