Можно ли использовать fseek (stdin, 1, SEEK_SET) или rewind (stdin) для очистки входного буфера вместо непереносимого fflush (stdin)?

Так как я обнаружилfflush(stdin) это не портативный способ справиться со знакомой проблемой"новая строка скрывается во входном буфере"Я использовал следующее, когда яиметь использованиеscanf:

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

Но сегодня я наткнулся на эту строку, которую я заметил изcplusplus.com на fflush:

fflush () ... в файлах, открытых для обновления (то есть открытых как для чтения, так и для записи), поток должен быть очищен после операции вывода перед выполнением операции ввода. Это может быть сделано либо путем изменения положения (fseek, fsetpos, rewind), либо путем явного вызова fflush

На самом деле, я читал это много раз. Итак, я хочу подтвердить, могу ли я просто использовать кого-либо из следующего передscanf() служить той же цели, чтоfflush(stdin) служит, когда это поддерживается:

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

PS rewind(stdin) кажется довольно безопасным и работоспособным для очистки буфера, я не прав?

ошибка Я должен был упомянутьfseek(stdin,0,SEEK_SET) если мы говорим оstdin поскольку мы не можем использовать любое смещение, кроме 0 или возвращенноеftell() в этом случае.

Ответы на вопрос(1)

Ваш ответ на вопрос