2012-05-14 11 views

Respuesta

13

cin.ignore descarta caracteres, hasta el número especificado, o hasta que se alcanza el delimitador (si está incluido). Si lo llamas sin argumentos, descarta un carácter del buffer de entrada.

Por ejemplo, cin.ignore (80, '\n') ignoraría 80 caracteres, o tantos como encuentre hasta que llegue a una nueva línea.

cin.sync descarta todos los caracteres no leídos del búfer de entrada. Sin embargo, no se garantiza que lo haga en cada implementación. Por lo tanto, ignore es una mejor opción si quiere consistencia.

cin.sync() borraría lo que queda. El único uso que se me ocurre para sync() que no se puede hacer con ignore es un reemplazo para system ("PAUSE");:

cin.sync(); //discard unread characters (0 if none) 
cin.get(); //wait for input 

Con cin.ignore() y cin.get(), esto podría ser un poco de una mezcla:

cin.ignore (std::numeric_limits<std::streamsize>::max(),'\n'); //wait for newline 
//cin.get() 

Si le sobraba una nueva línea, simplemente poner ignore parecerá omitirla. Sin embargo, al poner ambos esperará dos entradas si no hay línea nueva. Desechar todo lo que no se lee resuelve ese problema, pero nuevamente, no es consistente.

+0

me puedes mostrar implementaciones específicas que cin.sync no es seguro! – 5fox

+1

@ 5fox: Puedo mostrarle implementaciones donde no hace nada: http://ideone.com/AR8lB –

+0

ignore() debe llamarse antes que cin o después de cin? Para ser específico, la primera vez que voy por cin, ¿necesito echar datos no deseados en el búfer, si hay alguno? ¿O programará el lavado de todo cuando se ingrese main? Pero lo que noté es que si llamamos a ignorar(), espera algún carácter de espacio no blanco por primera vez. – Rajesh