Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema con cin.getline();

Iniciado por Neodivert, 21 de Julio de 2007, 11:28:32 PM

« anterior - próximo »

Neodivert

Buenas, estaba haciendo el tipico programa de la agenda en C++ usando listas y me da problemas con la funcion cin.getline();, mas concretamente con lo que viene despues de ella. :S

Al poner en la agenda que pidiera el telefono (al introducir un nuevo contacto) lo hacia con cin.getline(Nuevo_Contacto->Telefono, 10); y me lo cogia bien el problema es al poner despues algun cin.get(); o limpiar el buffer, el programa se queda atascado y no se por que. Para simplificarlo y ver que solo era un problema en esa parte y no tenia nada que ver con el resto del programa hize uno muy sencillo, este.


#include<iostream>
using namespace std;

char Telefono[10];
char ch;

int main(){
   cin.getline(Telefono, 10);
   cout << Telefono << endl;
 
   while( (ch=cin.get())!='\n'); // Limpiar el buffer;
}



Y el programa sigue atascandose justo despues de mostrar el telefono, a la hora de limpiar el buffer, la cosa es que si lo quito y pongo cin.get() (Para poder ver el programa sin que se cierre) se lo salta, y si lo pongo con lo de limpiar el buffer antes o despues del cin.getline(); se cuelga.

Lenguage C++ y compilador Dev-C++


Gracias  :wink:

Zaelsius

Tu problema es que cuando se introducen 10 o mas caracteres en el campo teléfono, se produce un error en cin.getline(), ya que la función sólo puede guardar 9 caracteres + NULL en el buffer.

Para detectar esos casos, prueba con este código:

cin.getline(Telefono, 10);
   cout << Telefono << endl;

if (ios_base::failbit)
cout << "error leyendo telefono" << endl;
else
       while( (ch=cin.get())!='\n'); // Limpiar el buffer;


Para conocer más detalles, prueba a buscar 'getline failbit' en Google.

Neodivert

Muchas gracias, pero... (Y aqui me preparo para poner esta cara  :oops: si me equivoco en algo), ¿ios_base::failbit al ser una variable (Si no me equivoco, una constante de un enumerado) diferente de 0, la condición no dará siempre "true"?

De todas formas muchisimas gracias, por que me dirigiste en el camino correcto y pude solucionar el problema, al encontrar la funcion cin.fail() para comprobar si se metia mas caracteres de lo que era. ;) ;) ;)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.