Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Wiki Markup
h1. printf

printf()-funktio on C-kielen tulostuskäsky. Se on esitelty stdio.h \-tiedostossa, joten käsky {{\#include<stdio.h>}} pitää olla ohjelman alussa.

h2. Funktion kutsu

{code}
printf("muotoilumerkkijono", muuttuja1, muuttuja2, ...); // ... tarkoittaa mahdollisia muita muuttujia
{code}
, jossa _muotoilumerkkijono_ muodostuu seuraavista (yhdestä tai useammasta):
|| muotoilu || tyyppi || selitys ||
| %c | char/int | yksi merkki |
| %s | char\[\] | merkkijono (päättyy NULL-merkkiin) |
| %d | int/char | kokonaisluku |
| %i | int/char | kokonaisluku |
| %u | unsigned int/unsigned char | etumerkitön kokonaisluku |
| %l | long | pitkä kokonaisluku |
| %f | float | reaaliluku |
| %lf | double | kaksoistarkkuuden reaaliluku |
, ja _muuttuja_ on muuttujan nimi, jonka tyyppi vastaa %-muotoiluja.
{note:title=Huom}
Parametrien ja %-merkkien lukumäärä tulisi olla sama\!
{note}

h2. Tulostuksen muotoilu

kontrollinohjausmerkit:
|| merkki || selitys || englanniksi ||
| \b | siirto vasemmalle | backspace |
| \f | arkin poisto | form feed |
| \n | uusi rivi | line feed |
| \r | telan palautus | carriage return |
| \t | vaakasuora tabulointi | horizontal tab |
| \" | lainausmerkki | double quote |
| \' | heittomerkki | single quote |
| \0 | null | null |
| \\ | vasemmalle vino viiva | backslash |
| \v | pystysuora tabulointi | vertical tab |
| \a | hälytys | alert |
| \N | oktaalivakio | octal constant |
| \xN | heksadesimaalivakio | hexadesimal constant |
Kontrollinohjausmerkit kirjoitetaan lainausmerkkien sisään.

Esim.
{code}
int Luku1, Luku2;
printf("Luku1\tLuku2\n");         // Tulostaa "Luku1" ja "Luku2" tabulaattorilla eroteltuna ja rivinvaihdon lopuksi.
printf("%d\t%d\n", Luku1, Luku2); // Tulostaa Luku1 ja Luku2 muuttujien arvon ruudulle tabulaattorilla eroteltuna ja rivinvaihdon lopuksi.
{code}

h2. Lukujen muotoilu

Myös sitä miten luvut tulostuvat, voidaan kontrolloida.
|| muotoilu || tulostaa || tasaus || täyttömerkki || desimaalit ||
| %4d | kokonaisluvun | 4 merkkiä | välilyönti | \- |
| %03d | kokonaisluvun | 3 merkkiä | nolla | \- |
| \+%d | näyttää kokonaisluvun etumerkin, myös pos. | \- | \- | \- |
| %.3f | reaaliluvun | \- | \- | 3 |
| %6.3f | reaaliluvun | 6 merkkiä | välilyönti | 3 |

h2. Esimerkkejä


h3. Kokonaislukumuuttujan (int) tulostus:

{code}
int auton_nopeus=120; // km/h
printf("Auton nopeus on %d", auton_nopeus);
{code}

h3. Useamman muuttujan tulostus:

{code}
char Juttu[] = "tulostan lukuja"; // Merkkijonon luominen
int Luku = 5;
float Reaaliluku = 45.7;
printf("Juttuja: %s, numeroita %d, Reaalilukuja %f\n", Juttu, Luku, Reaaliluku);
{code}
Tuloste on:
{noformat}
Juttuja: tulostan lukuja, numeroita 5, Reaalilukuja 45.7
{noformat}

h3. Esimerkki, jossa on käytetty printf()-funktion eri muotoja sekä tyypinmuunnoksia jne.

{code}
/* Ohjelma, joka tulostaa antamasi reaaliluvun kokonaislukuna, heksalukuna sekä oktaalilukuna. */
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void main(void)
{
    double Reaaliluku;
    int Kokonaisluku, Laskuri=0;
    char Merkkeja[100];
    char Merkki;

    // silmukka, jossa ollaan niin kauan kuin käyttäjä syöttää luvun 555
    while(Kokonaisluku != 555)
    {
        system("cls"); // putsataan ruutu
        printf("Anna reaaliluku: ");
        do
        { // tieto näppikseltä
            Merkki = getche(); // laitetaan Merkki, Merkkeja vektoriin
            Merkkeja[Laskuri] = Merkki;
            Laskuri=Laskuri+1; // lisätään paikkaa vektorissa
        } while (Laskuri < 8 && Merkki != 13);

        // Päätetään merkkijono
        Merkkeja[Laskuri] = '\0';
        Laskuri = 0;

        // Muutetaan merkkijono reaaliluvuksi
        Reaaliluku = atof(Merkkeja);
        printf("\nReaaliluku on %.3f ",Reaaliluku);

        // Muutetaan reaaliluku kokonaisluvuksi
        Kokonaisluku = (int) Reaaliluku;
        printf("\nKokonaisluku on %d ",Kokonaisluku);

        // Tulostus 16-kantaisena lukuna
        printf("\nHeksaluku on %x ",Kokonaisluku);

        // Tulostus 8-kantaisena lukuna
        printf("\nOktaaliluku on %o ",Kokonaisluku);

        printf("\nPaina Enter");
        getch();
    }
}
{code}