Øsse Skrevet 11. februar 2008 Skrevet 11. februar 2008 (endret) Hei, Jeg prøver å lage en falsk loading bar, for eksempel: cout << "\r[----------]"; system("sleep 0.3"); cout << "\r[#---------]"; system("sleep 0.3"); cout << "\r[##--------]"; system("sleep 0.3"); cout << "\r[###-------]"; system("sleep 0.3"); cout << "\r[####------]"; system("sleep 0.3"); cout << "\r[#####-----]"; system("sleep 0.3"); cout << "\r[######----]"; system("sleep 0.3"); cout << "\r[#######---]"; system("sleep 0.3"); cout << "\r[########--]"; system("sleep 0.3"); cout << "\r[#########-]"; system("sleep 0.3"); cout << "\r[##########]"; system("sleep 0.3"); cout << "\nLoading complete!\n"; Problemet mitt er at det ikke vises slik man skulle tro. Ettter litt frem og tilbake så virker det som std::cout buffrer all output frem til et linjeskift, og så viser den linjen på skjermen. Er det en måte å unngå dette, ved f.eks. en annen output-kommando? Jeg har fått det til å funke ved en clear rett før neste linje skrives, men da er det ikke så gøy lenger. (Ja, jeg er klar over at dette er et litt meningsløst prosjekt, men jeg vil bare se om det går an ) Endret 11. februar 2008 av øsse87
Øsse Skrevet 11. februar 2008 Forfatter Skrevet 11. februar 2008 Jeg fant ut av det sånn halvveis. std::cerr tømmer visstnok bufferen etter enhver output-operasjon. Da jeg erstattet cout med cerr i koden over fungerte det akkurat slik jeg håpte det skulle gjøre. Det er visst en kommando std::flush som også skal gjøre jobben, men den fikk jeg ikke til å funke. Hvordan brukes denne? Og litt off-topic: hvordan spesifiserer jeg hvor cerr skal skrive output? Slik jeg forstår det er cout og cerr ment til forskjellige ting, hvor cerr skal skrive feilmeldinger.
GeirGrusom Skrevet 11. februar 2008 Skrevet 11. februar 2008 Det er en funksjon som heter flush som fikser dette.
Dead_Rabbit Skrevet 13. februar 2008 Skrevet 13. februar 2008 std::cerr er ikke buffret i det heletatt. Uansett, du bruker std::flush slik: std::cout << "jalla" << std::flush;
Frika Bazinga Skrevet 17. februar 2008 Skrevet 17. februar 2008 (endret) eller : #include <windows.h> using namespace std; int main() { cout << "Checking."; Sleep(100); system("CLS"); cin.clear(); cout << "Checking.."; Sleep(100); system("CLS"); cin.clear(); cout << "Checking..."; Sleep(100); system("CLS"); cin.clear(); cout << "Checking."; Sleep(100); system("CLS"); cin.clear(); cout << "Checking.."; Sleep(100); system("CLS"); cin.clear(); cout << "Checking..."; Sleep(300); system("CLS"); cin.clear(); } Endret 17. februar 2008 av FR!K
GeirGrusom Skrevet 17. februar 2008 Skrevet 17. februar 2008 (endret) Det er også mulig å lage sitt eget buffer og skippe std::cout fullstendig. Fordelen er at man da kan endre en ting uten å måtte tegne alt på nytt. Endret 17. februar 2008 av GeirGrusom
Mynotir Skrevet 28. februar 2008 Skrevet 28. februar 2008 for(int a = 1; a < 99; a++) { cout << "#"; Sleep (500); } Jeg er helt nybegynner men den bør da gjøre det samme som den i førsteposten, bare med mindre kode. Eller?
Jonhoo Skrevet 28. februar 2008 Skrevet 28. februar 2008 Veldig veldig enkelt dette her (For å gi en komplett løsning..) cout << std::flush << "\r[------]"; system("sleep 0.3"); cout << std::flush << "\r[#-----]"; system("sleep 0.3"); cout << std::flush << "\r[##----]"; system("sleep 0.3"); cout << std::flush << "\r[###---]"; etc... =)
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå