Título: cin.getline y cin.ignore Publicado por: ricardo2013 en 25 Octubre 2012, 13:08 pm Código
Compilo y ejecuto: Código: [tmp]$ g++ a1.cpp -Wall -g -o a1 ¿Por qué no me pide por pantalla el valor de día? Gracias de antemano Título: Re: cin.getline y cin.ignore Publicado por: leosansan en 25 Octubre 2012, 14:08 pm ¿Por qué no me pide por pantalla el valor de día? Por la "basura" que queda en el buffer, entiéndase excesos de caracteres introducidos que hay que eliminar. Como aficionado te propongo esta solución:Código Saludos!. Título: Re: cin.getline y cin.ignore Publicado por: ricardo2013 en 25 Octubre 2012, 14:33 pm Gracias leosansan, pero no soluciona el problema (lo he probado). Según entiendo, cin.getline debería de "eliminar" los datos sobrantes del buffer, pero parece que no funciona. Lo curioso es que el valor que le da a dia es el que tiene por defecto, y no uno cualquier obtenido del buffer. Es como si cin no se ejecutase.
¿A alguien se le ocurre donde puede estar el error? Título: Re: cin.getline y cin.ignore Publicado por: leosansan en 25 Octubre 2012, 15:16 pm Gracias leosansan, pero no soluciona el problema (lo he probado). Citar Es curioso, a mí entrando más de 10 caracteres si me funciona Título: Re: cin.getline y cin.ignore Publicado por: ricardo2013 en 25 Octubre 2012, 15:26 pm Es curioso, a mí entrando más de 10 caracteres si me funciona Código: [tmp]$ ./test Fijate que sigue impriendo 0, el valor que tiene día por defecto. Yo sigo leyendo y buscando... si cin.getline llega al número máximo de carácteres sin encontrar el delimitador, activa el flag failbit. Código
Código: [tmp]$ ./dd Fijaros como imprime fail. He introducido esta línea antes del if(cin.fail()) Código
Ahora NO imprime el fail pero sigue sin funcionar, el cin no lee nada. Estoy amargado con esto :( Título: Re: cin.getline y cin.ignore Publicado por: ricardo2013 en 25 Octubre 2012, 15:52 pm Es así
Código
Primero se desactivan los indicadores de error y después se limpia el buffer con cin.ignore. Un saludo Título: Re: cin.getline y cin.ignore Publicado por: rir3760 en 25 Octubre 2012, 17:01 pm Puedes ahorrarte la llamada a la función "clear" utilizando, en lugar de "getline", la función miembro "get":
Código
Un saludo |