You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
MIGUEL Á. TOLEDO MARTÍNEZ<br />
Cuándo se ejecuta este programa, parece como si C++ saltara sobre el enunciado cin.getline()<br />
¿Cómo puede ser esto? Bien, si vemos el contenido de numero y nombre esto es lo que veríamos<br />
(suponiendo que se introdujo el entero 123):<br />
numero<br />
int 123<br />
nombre<br />
[0] ‘\0’<br />
[1] ‘\0’<br />
Observe que la variable de cadena nombre tiene el terminador nulo en la posición [0] del arreglo<br />
porque cuando se escribe el número 123, se debe oprimir la tecla ENTER (¿) Esto coloca un<br />
carácter CRLF en la memoria temporal de flujo. Sin embargo, el enunciado cin>>numero no<br />
extrae el carácter CRLF (porque es un espacio en blanco) y permanece en la memoria temporal.<br />
Cuando se ejecuta el enunciado cin.getline(nombre,TAMANO), lee la memoria temporal y ve el<br />
carácter CRLF. Como el valor predeterminado del carácter delimitador es justamente CRLF, la<br />
función termina de ejecutarse y agrega el carácter terminador nulo en el arreglo. De este modo, el<br />
usuario nunca tiene la oportunidad de ingresar un nombre.<br />
Existen tres formas básicas de resolver el problema anterior. Una de ellas es especificar un<br />
carácter delimitador diferente en la función getline() Sin embargo, el usuario deberá escribir este<br />
carácter para terminar la operación, con las consecuentes molestias.<br />
Una segunda forma es limpiar la memoria temporal leyendo el carácter CRLF dentro de una<br />
variable temporal después de cualquier dato numérico o carácter y antes de leer cualquier cadena<br />
de datos. Para hacer esto, deberá definirse una variable temporal como arreglo de dos caracteres,<br />
por ejemplo, temporal[2]<br />
Después de usar cin para leer cualquier dato numérico o de un solo carácter emplearemos el<br />
enunciado cin.getline(temporal,2) para leer el caracteres CRLF restante en la memoria temporal<br />
del teclado, de esta manera se limpia la memoria temporal.<br />
Ejemplo 7.16<br />
El siguiente programa: CINGET3.CPP, modifica el programa CINGET2.CPP, empleando una<br />
variable temporal.<br />
/* El siguiente programa: CINGET3.CPP, ilustra como usar una variable temporal<br />
para limpiar la memoria temporal (buffer) del teclado, después de haber leído<br />
una variable numérica.<br />
*/<br />
#include // Para cout<br />
const int TAMANO = 31; // Define el tamaño del arreglo<br />
void main(void)<br />
{<br />
FUNDAMENTOS – <strong>LECCIÓN</strong> 7 7-21