short s=59; char sek[4],tauluun[13]; itoa(s,sek,10); strcpy(tauluun,"TIME "); if (s<10) strcat(tauluun,"0"); strcat(tauluun,sek);
Ylhäällä olevalla koodilla muutetaan short muuttuja char taulukoksi sek,tai ei muuteta vaan muodostetaan myös merkkijono sek,sitten sek liitetään lopussa tauluun merkkijonoon.
Ongelma ei ole tässä vaan kuinka tehdä vastaava koodi float tyypin muuttujalle ja yhden desimaalin tarkkuudella?
Jotain tämmöistä kaipailet?
float desimaali = 2.5; sprintf(tauluun, "TIME %0.1f", desimaali); printf("%s\n", tauluun);
Funktiota itoa ei yleensä kannata käyttää, se ei kuulu standardiin. Huomattavasti turvallisempi on sprintf, joka toimii kuten printf mutta kirjoittaa char-taulukkoon. Vielä parempi on snprintf, jolle voi kertoa vielä taulukon koon, jottei data vahingossakaan mene yli. Sitä ei kuitenkaan ole vanhoissa standardikirjaston toteutuksissa, koska se tuli vasta C99-standardin myötä.
Tuonkin koodin saisit sprintf-funktiolla tehtyä ilman apumuuttujia yhdellä kutsulla:
short s = 59; char taulu[13]; sprintf(taulu, "TIME %02hd", s);
Yllä nomic antoikin liukuluvun tulostukseen tarvittavan formaatin, jos se jostain syystä on vielä hukassa.
Kiitoksia nomic ja Metabolix!
Aihe on jo aika vanha, joten et voi enää vastata siihen.