Czy fseek (stdin, 1, SEEK_SET) lub rewind (stdin) może być użyty do opróżnienia bufora wejściowego zamiast nieprzenośnego fflush (stdin)?

Odkąd odkryłemfflush(stdin) nie jest przenośnym sposobem radzenia sobie ze znanym problemem„nowa linia czai się w buforze wejściowym”, Korzystałem z poniższego, kiedymusieć posługiwać sięscanf:

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

Ale dziś natknąłem się na tę linię, którą zauważyłemcplusplus.com na fflush:

fflush () ... w plikach otwartych do aktualizacji (tj. otwartych zarówno do odczytu, jak i zapisu), strumień zostanie opróżniony po operacji wyjściowej przed wykonaniem operacji wejściowej. Można to zrobić przez repozycjonowanie (fseek, fsetpos, przewijanie do tyłu) lub wywołanie jawnie fflush

W rzeczywistości przeczytałem to już wiele razy. Chcę więc potwierdzić, czy mogę po prostu użyć kogokolwiek z poniższych przedscanf() służyć temu samemu celowifflush(stdin) służy, gdy jest obsługiwany:

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

PS rewind(stdin) Wydaje się całkiem bezpieczne i sprawne, aby opróżnić bufor, czy się mylę?

Błąd Powinienem był wspomniećfseek(stdin,0,SEEK_SET) jeśli o tym rozmawiamystdin ponieważ nie możemy użyć żadnego przesunięcia innego niż 0 lub zwróconego przezftell() w tym wypadku.

questionAnswers(1)

yourAnswerToTheQuestion