¿Se puede usar fseek (stdin, 1, SEEK_SET) o rebobinar (stdin) para vaciar el búfer de entrada en lugar de fflush no portátil (stdin)?

Desde que descubrifflush(stdin) No es una forma portátil de lidiar con el problema familiar de"Nueva línea al acecho en el búfer de entrada", He estado usando lo siguiente cuandoTiene que utilizarscanf:

while((c = getchar()) != '\n' && c != EOF);

Pero hoy me topé con esta línea que había notado desdecplusplus.com en fflush:

fflush () ... en los archivos abiertos para actualización (es decir, abierto tanto para lectura como para escritura), el flujo se debe limpiar después de una operación de salida antes de realizar una operación de entrada. Esto se puede hacer mediante el reposicionamiento (fseek, fsetpos, rebobinar) o llamando explícitamente a fflush

De hecho, lo he leído muchas veces. Así que quiero confirmar si puedo usar cualquiera de los siguientes antes descanf() para servir al mismo propósito quefflush(stdin) Sirve cuando está soportado:

fseek(stdin,1,SEEK_SET);
rewind(stdin);

PD rewind(stdin) Parece bastante seguro y realizable para vaciar el búfer, ¿me equivoco?

Error Debería haber mencionadofseek(stdin,0,SEEK_SET) si estamos hablando destdin Como no podemos usar ningún desplazamiento que no sea 0 o uno devuelto porftell() en ese caso.

Respuestas a la pregunta(1)

Su respuesta a la pregunta