Carácter \n

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:

entrada_datosd_listado

La salida sería:

entrada_datos_salida

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:

findefichero_1

y después de la lectura:

findefichero_2

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:

entrada_datos_listado_3

Al ejecutar el programa y tecleamos el dato 1000, se producirá el resultado siguiente:

entrada_caracter_valido_salida

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,

findefichero_2

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:

salida_entrada_datos_listado

 Vemos el resultado obtenido satisfactoriamente:

entrada_consola

El programa está esperando que pulsemos la tecla ENTER (Entrar),

entrada_7_salida

terminando la ejecución al detectar la tecla Entrar.

atras2

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.