[C con Clase] Ingreso de datos cin

Steven Davidson srd4121 en njit.edu
Mar Nov 22 11:25:23 CET 2011


Hola Luis,

2011/11/22 Luis Gutierrez Gomez <gutierrezgl en hotmail.com>:
>
>
> Hola a todos, y agradeciendo de antemano sus consejos.
>
> Tengo el siguiente problema. Este programa lo que debe hacer es inicialmente solicitarme 10
>
> nombres de personas y sus telefonos. Llenados esos datos, me mostrará un menú donde puede elegir:
>
> a) saber el telefono de una persona ingresando su nombre.
>
> b) saber el nombre de una persona ingresando su telefono. Y
>
> c) salir del programa.
>
>
>
> El programita aparentemente funcionaba bien, ya que para todas las pruebas, solo le ingresaba
>
> un nombre solo ( sin apellido ) y su numero telefonico, de los diez datos que me pedia , bueno en realidad
>
> lo probaba con tres datos. Bueno el hecho es que si funcionaba bien. Pero ya al final de las pruebas
>
> lo quise probar con datos mas reales que ingresaba, que constaban de un nombre y apellido (separado ´por un tab(barra
>
> espaciadora) ), pero
>
> al dar "enter", la aplicación se salta al siguiente "nombre", osea ya no me pide el telefono del primer dato ingresado.
>
> Esto lo he observado que pasa cada vez que uso el "tab" separando nombre de apellido al ingresar el dato "nombre"; ya que cuando
>
> ingreso el mismo nombre y apellido corrido (sin "tab")el programa si me pide el telefono respectivo, osea ya
>
> no se salta, y el programa funciona bien.
>

Esto se debe al comportamiento de 'cin >>' cuando lee caracteres. Se
detiene al leer un espacio blanco: ' ' (espacio), '\t' (tabulador),
'\r' (retorno de carro). '\n' (nueva línea), '\v' (tabulador
vertical), y '\f' (avance de página).

La solución es usar la función miembro 'getline()' que lees y extrae
todos los caracteres hasta que una de las siguientes tres condiciones
suceda:
1. Se lee una cantidad de N-1 caracteres indicada por el usuario como N,
2. Se lee hasta el carácter separador, que por defecto es '\n', o
3. Se lee hasta el carácter de fin-de-fichero (EOF).

En cualquier caso, siempre se agrega el carácter nulo al final de la
cadena. Por ejemplo,

char szNombreCompleto[1024]="";

cin.getline( szNombreCompleto, 1024 );


Puedes consultar la referencia en el apéndice E de nuestro curso de C++:
- http://c.conclase.net/curso/index.php?cap=904c#APD_istream
- http://c.conclase.net/curso/index.php?cap=904f#APD_funcionescin


Espero haber aclarado la duda.

Steven




Más información sobre la lista de distribución Cconclase