Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: float merkkijonoksi

DumTom [17.05.2011 20:28:16]

#

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?

nomic [17.05.2011 20:38:03]

#

Jotain tämmöistä kaipailet?

float desimaali = 2.5;
sprintf(tauluun, "TIME %0.1f", desimaali);
printf("%s\n", tauluun);

Metabolix [17.05.2011 20:38:20]

#

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.

DumTom [18.05.2011 04:07:38]

#

Kiitoksia nomic ja Metabolix!

Vastaus

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

Tietoa sivustosta