[C con Clase] ¿CÓMO INGRESAR PALABRAS CON ESPACIOS?

Steven Davidson srd4121 en njit.edu
Dom Sep 5 04:25:18 CEST 2010


Hola Andrés Felipe,

On 9/4/2010 12:11 PM, Andrés Felipe Jaramillo Osorio wrote:
> Hola a todos, necesito hacer un programa que le pida a varios usuarios
> su nombre completo y varios datos como edad....algo así
>
> for(;;){
>           cout<<"Ingrese su nombre: ";
>           cin.getline(nombre,20)
>           cout<<" Ingrese su edad:"
>           cin>>edad;
>
>          ......
> }
>
> También le pongo al programa cin.get(); y me lee bien la primera vez
> pero después no espera a que ingrese datos......
>

El problema tiene que ver con la lectura de 'edad', porque seguramente 
has definido esta variable como 'int' o algún tipo numérico. Al leer 
'cin >>' los caracteres introducidos por el usuario, su comportamiento 
se basa en interpretarlos como parte de la definición de un número 
(entero, seguramente). Al encontrarse con un carácter inválido, la 
lectura se detiene, sin extraer ese carácter inválido. En tu caso, lo 
más seguro es que el carácter leído es el fin-de-línea: '\n'. Por lo 
tanto, en la siguiente lectura, que será para 'nombre', el 
comportamiento de 'cin.getline()' detiene la lectura y extrae el 
carácter '\n', aparentando saltarse esta lectura para leer la edad.

La solución es extraer los caracteres del búfer del teclado después de 
la lectura para 'edad'. Si no te quieres complicar mucho la cabeza, 
supón que se trata de extraer el carácter '\n', por lo que puedes usar 
'get()'. Esto es,

cin >> edad;
cin.get();  // Extraemos '\n'


Espero haber aclarado la duda.

Steven





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