Czyszczenie bufora klawiatury w języku C

Witam. Chcę zrobić coś takiego:

char tablica[10];

int i=0;

for (i=0; i<5; i++){

               printf("Wpisz cos: ");

               fgets(tablica,sizeof(tablica),stdin);

               printf("Wpisano: %s.",tablica);

               }

Mam taki problem, że gdy wpiszę więcej znaków niż pozwala fgets to w następnym obiegu pętli wpisze się to co zostało, a chcę żeby można było pisać od nowa. Jak mogę wyczyścić to co zostało?

Nie chcę powiększać tablicy, właśnie chodzi o to żeby zareagować w odpowiedni sposób na taką sytuację. Nie chcę też używać scanfa.

 

Ten kod jest testowy/edukacyjny i nie robi nic odkrywczego.

Spróbuj dopisać to przed fgets:

fflush(stdin);

 

 

fflush() służy do opróżnienia/wysłania strumieni wyjściowych a pytającemu potrzeba wyczyścić strumień wejściowy. W zależności jakiego systemu operacyjnego używa może to zrobić używająć fpurge() dla systemów BSD lub __fpurge() dla systemów GNU/Linux.

Racja, ale to nie zmienia faktu, że w tym konkretnym przypadku funkcja ta spełnia swoje zadanie. Poza tym fpurge nie jest częścią standardu języka.

Sprawdziłem fflush() i działa. Później sprawdzę też fpurge jak nie zapomnę.

Jeśli fflush() jest do czyszczenia strumieni wyjściowych to dlaczego działa też dla wejściowych? Kiedy to może nie działać i dlaczego?

Wszystko zależy od środowiska uruchomieniowego. Przykładowo w systemie Windows funkcjata została przystosowana do czyszczenia strumienia wejściowego. Natomiast pod Linuxem już niekoniecznie.

 

W sieci znalazłem bardziej uniwersalną metodę na czyszczenie strumienia wejściowego, jeśli komuś zależy na przenośności kodu między platformami: LINK.

Dzięki za odpowiedzi