Onko siis aikaa varten tehty oma muuttuja, ei nääs oikein onnistu noilla perusmuuttujilla ajan laskeminen ja ilmoittaminen.
Jep. Rakenne on nimeltään tm, ja se on määritelty time.h:ssa (ainakin pikaisesti vilkaistuna). tm-rakenteen sisällön pitäisi olla listattuna jossain päin nettiä.
Esim
#include <time.h> tm * aika; time_t t; aika = localtime(&t):
Um, melkein ymmärsin tuosta jotakin. :D Tarvitsen siis vain muuttujatyypin joka on ajan muodossa, siis tyyliin "kierrosaika = 4.51,765". tjsp
Aa, no sitten. Riippuen ajan tarkkuudesta, clock_t tai time_t. clock_t:llä saa myös sekunnin murto-osia, time_t:llä sekunnin tarkkuudella.
clock_t palauttaa 'tick':it ohjelman alusta lukien; time palauttaa sekunnit tammikuusta 1970 lähtien.
clock_t:n lukeman saa sekunneiksi jakamalla sen makrolla CLK_TCK.
#include <time.h> clock_t aika, aika_alku; aika_alku = clock(); while(1){ aika_nyt = clock(); printf("Aika kuluu, se on %d.\n", (aika - aika_alku)/CLK_TCK); }
Hmm, näyttää olevan tuo sun koodi C:tä (kaskun vaikuttikin vähän oudolle), mutta sen muuttujan ei tarvitse palauttaa yhtään mitään, sen pitää siis vain olla tavallinen muuttuja joka on muotoa "mm.ss.sekunnin murto-osat"... Joko löytyis oikea vastaus? :P
Tuollaista systeemiä ei uskoakseni standardissa ole mukana... Ja äkkiähän sen itsekin koodaa -_=.
Ja tuo toimii samalla tavalla myös C++:ssa (katsoin c++ -ohjetiedostosta). Tässä ihan alkuun pääsemiseksi tuon clock-t:n aikaeron muuntaminen muotoon mm:ss:murto:
// Kentän alussa asetettu: aika_alku = clock(); ... ... // Otetaan aikaero tikkeinä clock_t ero = clock() - aika_alku; int min, sec, mm; // Nykyinen aikaero sekunteina (esim. 64.336514) double murto = (double)ero / CLK_TCK; // Kokonaisosa talteen (esim. 64) sec = (int)(murto); // murto-muuttujaan desimaalit (- sekunnit), esim .336514 // ja sitten haluttuun tarkkuuteen pyöristys, tässä 2 // desimaalin tarkkuudella eli * 100 ja pyöristys. // Tässä nyt esim. .336514 => 34 mm = (int)(((murto - (double)sec) * 100) + 0.5); // Minuutit taas ovat... sekunnit jaettuna 60:llä, // esim. tässä 64 / 60 = 1.06666... => 1 min = (int)((double)sec / 60); // Ja lopuksi minuutit pois sekunneista, esim. täss nyt // sitten 64 - 1 * 60 = 4. // Lopputuloste: 1:4.34 sec -= (min * 60); cout<<min<<":"<<sec<<"."<<mm<<endl; ...
Joo antaa olla, tuokaan ei ihan vastaa tarpeitani... Pitää kehitellä joku oma patentti.
Ei sellaista ole olemassa. Joko teet sen (vaikka luokkana) tai teet tähän tapaan:
// TAika on sama kuin int typedef int TAika; // Muutetaan annetut ajanpalaset pelkiksi tuhannesosiksi TAika Tee_Aika(int tunnit, int minuutit, int sekuntit, int tuhannesosat) { return (tuhannesosat + (1000 * (sekuntit + (60 * (minuutit + (60 * tunnit)))))); } // Tulostetaan aika oikein char * Tulosta_Aika(TAika Aika) { // Tulostetaan aika cout << ((int)Aika / (1000*60*60)) << ":" << (((int)Aika / (1000*60)) % 60) << "." << (((int)Aika / (1000)) % 60) << "," << ((int)Aika % 1000); // Palautetaan "merkkijono", jossa ei ole mitään static char palautettava = 0; return &palautettava; } int main(void) { TAika Aika; Aika = Tee_Aika(10, 50, 36, 1928); // Tyhjän palautusarvon avulla voidaan tämäkin laitta cout-pötköön cout << Tulosta_Aika(Aika) << "\n"; return 0; }
Tietenkin "oikeampi" tapa olisi tehdä luokka, jossa olisi kaikki tarvittava siistimmin, mutta sen saat ihan itse kehittää.
Edit: Jeps, hidas taas. Mutta kannattaa varmaan se luokka tehdä. Ei siinä kauan kestäisi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.