#include <windows.h> #include <string> #include <sstream> using namespace std; string IntToString ( int number ) { ostringstream oss; oss<< number; return oss.str(); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int kokonaisaika; int paivat; int tunnit; int minuutit; int sekunnit; string str_paivat; string str_tunnit; string str_minuutit; string str_sekunnit; string teksti; kokonaisaika = GetTickCount(); kokonaisaika = kokonaisaika / 1000; paivat = kokonaisaika / 86400; kokonaisaika = kokonaisaika - paivat * 86400; str_paivat = IntToString(paivat); tunnit = kokonaisaika / 3600; kokonaisaika = kokonaisaika - tunnit * 3600; str_tunnit = IntToString(tunnit); minuutit = kokonaisaika / 60; kokonaisaika = kokonaisaika - minuutit * 60; str_minuutit = IntToString(minuutit); sekunnit = kokonaisaika; str_sekunnit = IntToString(sekunnit); teksti = "Järjestelmä on ollut käynnissä " + str_paivat + " päivää, " + str_tunnit + " tuntia, " + str_minuutit + " minuuttia ja " + str_sekunnit + " sekuntia."; MessageBoxA(NULL, teksti.c_str(), "Järjestelmän käynnissäoloaika", MB_ICONINFORMATION); return 0; }
Menikö oikein? Parannettavaa?
Voit testata laskujen oikeellisuuden helposti sijoittamalla koodin alussa valmiin arvon kokonaisajaksi.
kokonaisaika = GetTickCount() / 1000; // testi: 17 pv, 13 t, 11 min, 7 s kokonaisaika = 7 + 60 * (11 + 60 * (13 + 24 * 17));
GetTickCount palauttaa etumerkittömän kokonaisluvun. Kannattaisi vaihtaa kokonaisaika-muuttujan (ja ehkä muidenkin) tyypiksi DWORD (32-bittinen unsigned int). GetTickCount pyörähtää sitten joka tapauksessa ympäri 49,7 vuorokauden paikkeilla, kun DWORD-tyypin lukualue loppuu.
Tekstin muodostaminen kävisi helpommin ilman tuota muunnosfunktiota, ja samalla pääsisit ylimääräisistä muuttujista eroon.
std::ostringstream teksti; teksti << "Järj..." << paivat << " pv, " << tunnit << " t, ..."; MessageBoxA(0, teksti.str().c_str(), "...", MB_ICONINFORMATION);
Voit harjoituksena kokeilla myös laskujen järjestyksen vaihtamista:
sekunnit = aika % 60; aika /= 60; // minuutit ja tunnit samalla tavalla, päivät jäävät jäljelle.
Aihe on jo aika vanha, joten et voi enää vastata siihen.