Odpočítavanie času – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Odpočítavanie času – C / C++ – Fórum – Programujte.comOdpočítavanie času – C / C++ – Fórum – Programujte.com

 

gaben0
Stálý člen
25. 2. 2010   #1
-
0
-

Zdarte, robím program, ktorý má odpočítavať čas, tj. povedzme užívateľ zadá 60 sekúnd, tak sa bude odpočítavať 60, 59, ....atď. Všetko by bolo v poriadku, ale neviem, ako zabezpečiť, aby sa výpis na obrazovke refreshoval.Vie mi s tým niekto poradiť? Thx.

Nahlásit jako SPAM
IP: 85.237.5.–
C, C++
Bald3rr0
Super člen
26. 2. 2010   #2
-
0
-

To gaben : V čem konkértně máš problém? Nejjednodušší je program vždy na sekundu "uspat" a pak vypsat číslo o jedna menší. Pokud bys potřeboval, aby odpočítávání běželo v pozadí, musel bys použít vlákno.

Nahlásit jako SPAM
IP: 82.100.0.–
gaben0
Stálý člen
26. 2. 2010   #3
-
0
-

Môj problém načrtnem na príklade jednoduchého zobrazenia aktuálneho času. Povedzme že mám takýto kód:



time_t rawtime;
struct tm * timeinfo;
time (&rawtime);
timeinfo = localtime(&rawtime);

printf("Aktuálne je %d.%d.%d, %d:%d:%d\n", timeinfo->tm_mday, timeinfo->tm_mon+1, timeinfo->tm_year + 1900, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);


Takýto program mi vypíše povedzme
Aktuálne je 26.2.2010, 8:25:1



No ja by som potreboval aby sa ten čas refrešoval, čiže každú sekundu by sa ten vypísaný čas zmenil.

Keby som program vždy na sekundu uspal a vypísal čas znova, tak by som ho tam mal vypísaný viac krát, čo ja samozrejme nechcem.

Nahlásit jako SPAM
IP: 85.237.7.–
C, C++
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
26. 2. 2010   #4
-
0
-

To gaben :
#include<iostream>
#include<time.h>
#include <dos.h>
using namespace std;

int main()
{
cout<<"Cas : ";
int d = 0;
int i;
cin>>i;
do{
sleep(1);
i--;

d +=i;
cout<<i<<"\n";
}while(i!=0);

cout<<"Konec Soucet vsechsekund je "<<d;
system("pause");

Nahlásit jako SPAM
IP: 77.48.244.–
gaben0
Stálý člen
26. 2. 2010   #5
-
0
-

Anonymní uživatel: Buď som zle vysvetlil o čo sa snažím, alebo si ma nepochopil. Ja potrebujem aby bol zostávajúci čas vypísaný iba raz a prepisoval sa, nie aby sa vypisovalo 50, 49, 48 atď, ale aby bolo 50 a potom sa to prepísalo na 49, tj. naraz bude vypísané iba jedno číslo.

Nahlásit jako SPAM
IP: 85.237.24.–
C, C++
Bald3rr0
Super člen
26. 2. 2010   #6
-
0
-

To gaben : Pokud tam nemáš nic jiného, tak před každým výpisem použí system("CLS"); z knihovny stdlib.h, to ti smaže veškerý obsah konzole

Nahlásit jako SPAM
IP: 82.100.0.–
gaben0
Stálý člen
26. 2. 2010   #7
-
0
-

V podstate to už funguje, až na to že som musel použiť system("clear") namiesto system("CLS"), pretože robím pod linuxom. Zaujímalo by ma však, ako je napríklad moźné, že keď je v konzole nejaký progressbar (napríklad keď sťahuješ niečo v linuxe cez konzolu pomocou wget), tak sa tam mení stav toho progressbaru bez toho, aby sa neustále mazal celý obsah konzoly? Keby sa toto dalo spraviť nejakým podobným spôsobom, tak by to bolo úplne ideálne :)

Nahlásit jako SPAM
IP: 85.237.10.–
C, C++
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
26. 2. 2010   #8
-
0
-

To gaben :

#include<iostream>
#include<time.h>
#include <dos.h>
using namespace std;

int main()
{
cout<<"Cas : ";
int d = 0;
int i;
cin>>i;
system("cls");
do{

sleep(1);
system("cls");
i--;

d +=i;
cout<<i<<"\n";

}while(i!=0);

cout<<"Konec Soucet vsechsekund je "<<d;
system("pause");
}

Nahlásit jako SPAM
IP: 77.48.244.–
Wizard0
Stálý člen
26. 2. 2010   #9
-
0
-

Mozes skusit este to, ze sa pomocou funkcie 'seek' vratis o par znakov spat a prepises ich.

Nahlásit jako SPAM
IP: 85.216.193.–
gaben0
Stálý člen
26. 2. 2010   #10
-
0
-

No ako teraz rozmýšlam, nebude to dobré, pretože potrebujem dosiahnuť aj to, že aby sa pri stlačení určitej klávesy odpočítavanie zastavilo, čiže by som musel použiť nejaké ďalšie knižnice (SDL a pod.)....s tými vláknami je to ako?

Nahlásit jako SPAM
IP: 85.237.5.–
C, C++
LJ10240
Stálý člen
6. 3. 2010   #11
-
0
-

Pokud zmacknes mezernik, tak by to melo skoncit...



#include<iostream>
#include<time.h>
#include <dos.h>
using namespace std;
int g_continue=1;
void vlakno(){
if(GetAsyncKeyState(VK_SPACE)){
g_continue=0;
return;
}
}
int main()
{
cout<<"Cas : ";
int d = 0;
int i;
cin>>i;
system("cls");
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) vlakno, NULL, 0, NULL);
do{

sleep(1);
system("cls");
i--;

d +=i;
cout<<i<<"\n";

}while(i!=0 && g_continue);

cout<<"Konec Soucet vsechsekund je "<<d;
system("pause");
}


EDIT...

Nahlásit jako SPAM
IP: 217.30.64.–
_Radek_
~ Anonymní uživatel
88 příspěvků
8. 3. 2010   #12
-
0
-

Ohledne tech progressbaru, mam pocit, ze existuje escape sekvene "\b", která vrátí kurzor o znak zpátky.
příklad:



cout << "ahoj" << "\b\b" << "svete";


by melo vypsat "ahsvete"

Nahlásit jako SPAM
IP: 212.111.4.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 38 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý