Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Hitaampi tekstin tulostus

Zakki [23.11.2007 22:28:52]

#

miten saisi tekstin tulostumaan niin, että vaikka sekuntissa tulee 10 kirjainta. jos sais vaikka jotenkin seuraavan koodin aina jokaisen kirjaimen jälkeen, ilman että tarvitsee ite alkaa kirjottamaan 9999 riviä?

clock_t goal = 100 + clock();
while (goal > clock());

Antti Laaksonen [23.11.2007 22:44:08]

#

Jos kirjaimet tulostaa yksi kerrallaan, niiden välissä voi toki odotella. Tässä on yksi esimerkki, joka tulostaa merkkijonon näytölle kymmenen kirjaimen sekuntivauhtia. Toisin sanoen joka kirjaimen tulostuksen jälkeen on 0,1 sekunnin odotus.

#include <stdio.h>
#include <time.h>

int main(void) {
    char teksti[] = "Ohjelmointiputka";
    int i;
    clock_t alku;
    alku = clock();
    for (i = 0; teksti[i] != 0; i++) {
        printf("%c", teksti[i]);
        alku = clock();
        while (((double)(clock() - alku) / CLOCKS_PER_SEC) < 0.1);
    }
    return 0;
}

Muoks. Jos tämä koodi ei toimi, seuraava lisäys printf-rivin jälkeen saattaa auttaa:

fflush(stdout);

Zakki [23.11.2007 22:49:32]

#

thänk juu

Legu [23.11.2007 22:54:22]

#

Tuo ei vaan ole yleispätevä ratkaisu, nimittäin itselläni Linuxilla ainakin teksti jää puskuriin eli esimerkiksi tuo koodi olisi periaatteessa sama kun odotettaisiin tuo 1,6 sekuntia ja sitten tulostettaisiin "Ohjelmointiputka". Parempi olisi käyttää vaikka ncursesia, jos aikoo saada tuon myös Linuxilla toimimaan samanlailla kuin Windowssillakin.

Tai sitten käyttää tuota fflush:ia :)

Metabolix [23.11.2007 23:19:55]

#

Muistutetaanpa vielä, että C:n standardin mukaan clock mittaa ohjelman käyttämää prosessoriaikaa eikä todellista aikaa. Valitettavasti kaikki sekuntia tarkemmat ajastusfunktiot ovat käyttöjärjestelmäkohtaisia. Windowsissa on GetTickCount-funktio, joka laskee millisekunteja.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta