Czyszczenie bufora klawiatury w języku C


(renifer3) #1

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.


(Aranthor) #2

Spróbuj dopisać to przed fgets:

fflush(stdin);

 


(tomms) #3

 

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.


(Aranthor) #4

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.


(renifer3) #5

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?


(Aranthor) #6

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.


(renifer3) #7

Dzięki za odpowiedzi