Cuando se están introduciendo datos desde el teclado y pulsamos la tecla Entrar se introduce también el carácter \n. Mientras que en la salida \n produce un CR+LF, en la entrada se corresponde con un LF; esto es, una expresión C++ como ‘\n’ == 10 daría como resultado true. En algunas ocasiones, este carácter \n puede tener indeseables efectos. Veamos un ejemplo de esto con un programa que lee un número real:
La salida sería:
Cuando se ejecute el operador >> sobre cin del programa anterior, si tecleamos 1000 y pulsamos la tecla Entrar, antes de la lectura habrá en el búfer de entrada (búfer asociado a cin) la información siguiente:
y después de la lectura:
Como el carácter \n no es un carácter válido para la lectura de un valor float, se interrumpe la lectura. Este carácter sobrante puede ocasionarnos problemas si a continuación ejecutamos otra sentencia de entrada que admita datos que sean caracteres como sucede con get. Por ejemplo, modificaremos el programa anterior para más detalles:
Al ejecutar el programa y tecleamos el dato 1000, se producirá el resultado siguiente:
Viendo el resultado, observamos que no se ha hecho la pausa porque el carácter sobrante nueva línea es aún un carácter válido para el método get,
por esa razón get no necesita esperar a que introduzcamos un carácter para la variable car.
La solución al problema es limpiar el búfer asociado con cin antes de volverlo a ejecutar, utilizando el método ignore. Modifique el programa anterior de la siguiente manera:
Vemos el resultado obtenido satisfactoriamente:
El programa está esperando que pulsemos la tecla ENTER (Entrar),
terminando la ejecución al detectar la tecla Entrar.
Debe estar conectado para enviar un comentario.