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