Terve
Koodailen tässä yhtä juttua, ja tarvitsisi tehdä seuraava: Kun ollaan tietyssä kohdassa, niin aletaan laskea aikaa ja viiden sekunnin kuluttua siitä kun on kohtaan saavuttu ohjelma sammuisi (return 0).
Kerro vielä tarkemmin, mitä pitää tapahtua sen viiden sekunnin aikana, jonka alussa ajanlasku alkaa ja jonka lopussa ohjelma sammuu. Mitä käyttöjärjestelmää ja kirjastoja käytät?
Jos ohjelmassa tapahtuu virhe, niin ohjataan gotolla ohjelman loppuun. Siellä sanotaan "Virhe, ohjelma sammuu viiden sekunin kuluttua!" ja sitten viiden sekunnin kuluttua se sammuukin.
Miten olisi tällainen koodi?
#include <stdio.h> #include <time.h> int main(void) { clock_t aika; printf("Ohjelma sammuu viiden sekunnin kuluttua!"); aika = clock(); while ((double)(clock() - aika) / CLOCKS_PER_SEC < 5); return 0; }
Kiitos Antti, nyt toimii! :)
Kannattaa pitää mielessä, että tuollainen koodi kuluttaa huiman määrän prosessoritehoa sen viiden sekunnin ajan: jatkuvasti tarkistetaan uudelleen ja uudelleen, joko se aika olisi kulunut. Kunnon ohjelmiin ei pidä tehdä tuollaisia odotuksia, vaan pitää käyttää jotain käyttöjärjestelmästä riippuvaa funktiota, joka antaa muiden ohjelmien käyttää prosessoria sen viiden sekunnin ajan. Windowsissa tällainen funktio on Sleep (windows.h, parametri sekunnin tuhannesosina) ja UNIX-järjestelmissä taas sleep (unistd.h, parametri sekunteina), usleep (unistd.h, parametri mikrosekunteina) tai nanosleep (time.h, esimerkkejä löytyy Googlella). Monet kirjastot (mm. SDL) sisältävät tätä varten funktion, joka käyttää jotain mainitsemaani käyttöjärjestelmäriippuvaista tapaa, jolloin ohjelmoijan tarvitsee osata vain yksi funktio (esim. SDL_Delay).
Antin double-muunnos ei myöskään ole tarpeen, kun odotettava aika on ilmaistu kokonaislukuna.
Aihe on jo aika vanha, joten et voi enää vastata siihen.