fbpx

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

  • Problema con cin y getline en C++ (salta entrada)

    Posted by César Vladimir Mayo Sosa on 12 septiembre, 2024 en 8:32 am

    Hola a todos, tengo una pregunta que me surgió desde el proyecto 6 cuando en un mismo ciclo “for” solicito al usuario que ingrese un numero y una cadena (ambos datos se van a almacenar en su respectivo arreglo) sucede una especie de bug al momento de correr el programa que hace que se salte una iteración del ciclo y no pueda ingresar algunos datos, para solucionar esto probé dos cosas, la primera es que en vez de utilizar la función “cin.getline” use solo “cin” y la segunda es hacer el proceso por separado en dos ciclos “for”. A continuación adjunto fotografías de referencia sobre lo que hablo, en este caso es en el proyecto 7, agradecería mucho si me pueden orientar sobre sí estoy cometiendo algún error al programar o declarar las variables o sí C++ no puede procesar lo que intento hacer. Muchas gracias.

    César Vladimir Mayo Sosa respondido 3 meses, 1 semana 2 Miembros · 2 Respuestas
  • 2 Respuestas
  • 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.

    • César Vladimir Mayo Sosa

      Miembro
      12 septiembre, 2024 en 11:08 pm

      Muchas gracias por tomarte el tiempo de responderme y explicarme que es lo que sucedía, ya lo probé y se solucionó mi problema.

Inicia sesión para responder.

Start of Discussion
0 de 0 respuestas Junio 2018
Ahora