Gå til innhold

[Løst sånn halvveis] Lage en "loading bar"


Anbefalte innlegg

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 :p )

Endret av øsse87
Lenke til kommentar
Videoannonse
Annonse

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.

Lenke til kommentar

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 av FR!K
Lenke til kommentar
  • 2 uker senere...

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...

 

=)

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...