Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Voiko C kielessä integer muuttujalla määrätä float luvun desimaalien määrän?

Ville [20.02.2009 19:53:27]

#

Eli pyydän käyttäjää syöttämään desimaaliluvun jonka otan talteen muuttujaan, siis näin.
printf("Anna desimaaliluku:");
scanf("%f",&desimaali);

Tämän jälkeen pyydän käyttäjältä kokonaisluvun jonka edellisen tavoin otan talteen muuttujaan luku.

Seuraavaksi haluaisin käyttää muuttujaa luku desimaalien määrän määrityksessä, mutta en ole onnistunut.
Jotain seuraavanlaista tulostuslausetta olen koettanut.
printf("Antamasi desimaaliluku: %.%df",desimaali,luku );
Mutta saan tulosteeksi seuraavan:
Antamasi desimaaliluku: %df

Toivottavasti saitte sepustuksestani "kiinni". Onko idea edes mahdollinen?

os [20.02.2009 20:07:18]

#

Joudut muodostamaan printf:n formaattimerkkijonon ajon aikana, esim sprintf:llä:

#include <stdio.h>

int main()
{
        char s[100];
        int n;
        float f = 0.123456789;

        printf("Desimaalit: ");
        scanf("%d", &n);

        sprintf(s, "%%.%df\n", n);
        printf(s, f);

        return 0;
}

Ja sitten vaan tarkistuksia joka väliin...

Ville [21.02.2009 09:43:35]

#

Kiitoksia vinkistä.

Olen tässä C kielen opiskelussa todella alkumetreillä joten sitä vielä kysyisin että mitä tarkoitit tuolla "Ja sitten vaan tarkistuksia joka väliin..."

Ja miksi tuossa sprintf - lauseessa on yksi prosentti merkki "ylimääräisenä"?
sprintf(s, "%%.%df\n", n);

eq [21.02.2009 10:30:32]

#

#include <stdio.h>

int main(void)
{
	int n = 0;
	float f = 0.123456789;

	printf("Desimaalit: ");
	scanf("%d", &n);

	printf("%.*f\n", n, f);

	return 0;
}

Koska %-merkillä kuvataan korvattavia symboleita muotoilluissa tulosteissa (*printf-funktiot), täytyy merkin itsensä saamiseksi laittaa niitä kaksi peräkkäin - tai ns. ylimääräinen kappale. Aiemmassa koodipätkässä sprintf-funktiolla luotiin merkkijono muotoa "%.nf\n", jossa n on kokonaisluku.

Ville [21.02.2009 10:49:29]

#

ok, kiitos :)

Vastaus

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

Tietoa sivustosta