Pregunta sobre iostream, c++ – La diferencia entre cin.ignore y cin.sync.

9

Cuál es la diferencia entrecin.ignore ycin.sync ?

Tu respuesta

1   la respuesta
14

cin.ignore descarta los caracteres, hasta el número especificado, o hasta que se alcance el delimitador (si está incluido). Si lo llama sin argumentos, descarta un carácter del búfer 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 hacerlo en cada implementación. Por lo tanto,ignore Es una mejor opción si quieres consistencia.

cin.sync() Acabaría de aclarar lo que queda. El único uso que se me ocurre parasync() eso no se puede hacer conignore es un reemplazo parasystem ("PAUSE");:

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

Concin.ignore() ycin.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 había una nueva línea sobrante, simplemente poniendoignore Parece que se lo salte. Sin embargo, al poner ambos se esperarán dos entradas si no hay una nueva línea. Descartar cualquier cosa que no se lea resuelve ese problema, pero nuevamente, no es consistente.

@Rajesh, Eso es realmente adecuado para una nueva pregunta en lugar de los comentarios de una pregunta de seis años. chris
@Rajesh, después. El búfer de entrada no debería tener elementos aleatorios cuando se inicia el programa. El caso de uso común para esto es borrar la entrada ingresada por el usuario o deshacerse de una nueva línea dejada por una operación de entrada. chris
@ 5fox: Puedo mostrarte implementaciones donde no hace nada:ideone.com/AR8lB Benjamin Lindley
ignorar () debe llamarse antes de cin o después de cin? Para ser específico, la primera vez que voy por cin, ¿tengo que vaciar los datos no deseados en el búfer, si los hay? ¿O el programa limpiará todo cuando se ingrese main? Pero lo que noté es que si llamamos a ignorar (), espera por primera vez a algún personaje que no sea espacio en blanco. Rajesh

Preguntas relacionadas