Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: user-marcos en 6 Marzo 2015, 21:30 pm



Título: c++ buffer
Publicado por: user-marcos en 6 Marzo 2015, 21:30 pm
Hola, estoy haciendo un programa de consola en c++, el cuerpo del programa tiene un menú switch donde dirige a los distintos módulos, resulta que 1 de cada 50 veces donde se pide la entrada del
menú, entra un valor basura, y el valor introducido pasa como entrada del siguiente cin>>.
supongo que esto se debe al buffer, he puesto el l_Buffer() antes del cin>> del menú, pero como en las otras 49 veces no tiene valor basura, el programa se queda en bucle.
¿Hay alguna manera de controlar si el buffer tiene algún valor para eliminarlo?

Un saludo.

void l_Buffer()
{
    while(cin.get() != '\n');
}


Título: Re: c++ buffer
Publicado por: ivancea96 en 6 Marzo 2015, 21:42 pm
No tengo constancia de valores basura usando cin, sin más. ¿Qué método usas para leer con cin?


Título: Re: c++ buffer
Publicado por: user-marcos en 6 Marzo 2015, 21:49 pm
No tengo constancia de valores basura usando cin, sin más. ¿Qué método usas para leer con cin?

Uso esto getline(cin, name, '\n');
Tampoco estoy convencido que la culpa sea del buffer, pero no se me ocurre otra cosa.


Título: Re: c++ buffer
Publicado por: ivancea96 en 6 Marzo 2015, 22:01 pm
No ha de haber ningún problema. Ponme un ejemplod e un código que te de problema, y lo miro.


Título: Re: c++ buffer
Publicado por: user-marcos en 6 Marzo 2015, 22:07 pm
No ha de haber ningún problema. Ponme un ejemplod e un código que te de problema, y lo miro.
El ejercicio es una práctica de clase, no puedo poner el código, porqué cuando lo subimos para hacer las correcciones tienen detector de plagio, si quieres te lo paso por privado con el autocorrector.


Título: Re: c++ buffer
Publicado por: ivancea96 en 6 Marzo 2015, 22:22 pm
Me basta con que simules la situación con otro código :o
Solo es para ver por qué da ese fallo.


Título: Re: c++ buffer
Publicado por: marlboreano en 8 Marzo 2015, 20:49 pm
Hola user-marcos.
Fijate si en el código leen alguna línea con el operador de redirección de flujo >> y LUEGO con getline. De ser así, deberías utilizar "cin.ignore()" luego de cada lectura con cin, para que no te de más problemas (cin lee caracter a caracter, también los caracteres de fin de línea y demás, lo deja en el buffer de entrada y se lo come la funcion getline).