Uczę się C ++ i znalazłem coś, czego nie rozumiem:
Bufory wyjściowe mogą być jawnie opróżniane, aby wymusić zapisanie bufora. Domyślnie czytanie
cin
rzutówcout
;cout
jest również opróżniany, gdy program kończy się normalnie.
Czyli opróżnianie bufora (na przykład bufora wyjściowego): czy to czyści bufor, usuwając wszystko w nim, czy czyści bufor, wysyłając wszystko, co się w nim znajduje? A może opróżnienie bufora oznacza coś zupełnie innego?
Zacytowałeś odpowiedź:
Oznacza to, że może być konieczne „opróżnienie” wyjścia, aby spowodować zapisanie go w źródłowym strumieniu (którym może być plik lub w wymienionych przykładach terminal).
Ogólnie rzecz biorąc, stdout / cout jest buforowane wierszowo: dane wyjściowe nie są wysyłane do systemu operacyjnego, dopóki nie napiszesz nowej linii lub jawnie nie opróżnisz bufora. Zaletą jest to, że coś podobnego
std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl
powoduje tylko jeden zapis do bazowego „pliku” zamiast sześciu, co jest znacznie lepsze pod względem wydajności. Wadą jest to, że kod taki jak:for (int i = 0; i < 5; i++) { std::cout << "."; sleep(1); // or something similar } std::cout << "\n";
wyświetli
.....
się natychmiast (dokładnasleep
implementacja, zobacz to pytanie ). W takich przypadkach będziesz potrzebować dodatkowego,<< std::flush
aby upewnić się, że dane wyjściowe zostaną wyświetlone.Czytanie
cin
rzutów,cout
więc nie potrzebujesz do tego jawnego koloru:std::string colour; std::cout << "Enter your favourite colour: "; std::cin >> colour;
źródło
sleep()
(POSIX) zSleep()
(Windows)cout
z przestrzenią nazw (tj.std::cout
), Ale nie zrobiłeś tego w przypadkuendl
, co również powinno wymagać tej kwalifikacji.Wyczyść bufor, wypisując wszystko.
źródło