Pode fseek (stdin, 1, SEEK_SET) ou rewind (stdin) ser usado para liberar o buffer de entrada em vez de fflush não portátil (stdin)?

Desde que descobrifflush(stdin) não é uma maneira portátil de lidar com o problema familiar de"nova linha oculta no buffer de entrada", Tenho usado o seguinte quandotem que usarscanf:

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

Mas hoje eu me deparei com essa linha que eu havia notadocplusplus.com no fflush:

fflush () ... nos arquivos abertos para atualização (ou seja, abertos para leitura e gravação), o fluxo deve ser liberado após uma operação de saída antes de executar uma operação de entrada. Isso pode ser feito reposicionando (fseek, fsetpos, rewind) ou chamando explicitamente fflush

De fato, eu li isso antes de muitas vezes. Então eu quero confirmar se eu posso simplesmente usar qualquer um dos seguintes antes doscanf() para servir o mesmo propósito quefflush(stdin) serve quando é suportado:

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

PS rewind(stdin) Parece bastante seguro e viável para liberar o buffer, estou errado?

Erro Eu deveria ter mencionadofseek(stdin,0,SEEK_SET) se estamos falandostdin como não podemos usar qualquer deslocamento diferente de 0 ou um retornado porftell() nesse caso.

questionAnswers(1)

yourAnswerToTheQuestion