Przeczytałem około 5-10 różnych porad, jak wyczyścić stdin, ale żaden z nich nie pasuje do moich potrzeb. Rzecz w tym, że fflush(stdin)
działało idealnie na moim komputerze, ale niestety nie działa wszędzie, więc potrzebuję czegoś z tą samą funkcjonalnością. Każdy inny sposób, w jaki próbowałem, usuwa stdin, gdy nie jest pusty, ale wymaga podania danych przez użytkownika, gdy stdin IS jest pusty, co oznacza, że wymaga on wprowadzenia w momencie, którego nie chcę uzyskać (+ odrzuca to mimo to).Jak wyczyścić wejście standardowe przed uzyskaniem nowego wejścia?
Pytanie brzmi: czy mogę w jakiś sposób upewnić się, że stdin
jest pusty, zanim wymagam wprowadzenia użytkownika? (A jeśli nie, wtedy i tylko wtedy jasne, że jakoś?) coś takiego:
if (stdin is NOT empty)
while (getchar() != '\n')
continue;
EDIT: chodzi o to, że ja załadować znaki z stdin
jeden po drugim, a w pewnym momencie część wkładu ze poprzednia iteracja może zostać odrzucona lub nie. tak czy inaczej, potrzebuję mieć jasne stdin
zanim poprosimy użytkownika o kolejne przetwarzanie danych wejściowych. Kasowanie samego bufora nie jest tak wielką sprawą, problemem jest to, co dzieje się, gdy dane wejściowe są puste, gdy program osiągnie punkt zerowania stdin
, ponieważ w tym momencie program potrzebuje innego wejścia, które zostanie zjedzone przez rozliczenie funkcjonować. To jest to, czego chcę się pozbyć. (Jeśli mogę użyć fflush(stdin);
po prostu wiedziałem, że do następnego wiersza mojego programie stdin
będzie pusta bez względu na to, bez zbędnych pytań ...)
'fflush (stdin)' jest UB. –
Nie ma czegoś takiego jak * pusty strumień I/O *, jest to ** strumień **. Rozważ: './myprog dev/random'; czy kiedykolwiek ujrzy koniec swojego strumienia stdin? – joop
programowanie go w systemie Windows, musi działać w systemie Linux ... – Tom