Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

Funktion kutsu

Code Block

printf

...

("muotoilumerkkijono", muuttuja1, muuttuja2, ...); // ... tarkoittaa mahdollisia muita muuttujia

, jossa muotoilumerkkijono muodostuu seuraavista (yhdestä tai useammasta):

muotoilu

tyyppi

selitys

%c

char

yksi merkki

%s

char[]

merkkijono (päättyy NULL-merkkiin)

%d

int

kokonaisluku

%i

int

kokonaisluku

%u

unsigned int

etumerkitön kokonaisluku

%l

long

pitkä kokonaisluku

%f

float

reaaliluku

%lf

double

kaksoistarkkuuden reaaliluku

, ja muuttuja on muuttujan nimi, jonka tyyppi vastaa %-muotoiluja.

Note
titleHuom

Parametrien ja %-merkkien lukumäärä tulisi olla sama!

Tulostuksen muotoilu

kontrollinohjausmerkitprintf argumenttissa olevine koodien merkitys:

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

Muotoilumerkkijono

muotoilu

tyyppi

selitys

%c

char

yksi merkki

%s

char[]

merkkijono (päättyy NULL-merkkiin)

%d

int

kokonaisluku

%i

int

kokonaisluku

%u

unsigned int

etumerkitön kokonaisluku

%l

long

pitkä kokonaisluku

%f

float

reaaliluku

%lf

double

kaksoistarkkuuden reaaliluku

Kaikki tulostusmuotoilut laitetaan lainausmerkien sisälle -merkistä printf-käsky tietää, että kyseessä on muotoilu.

Esimerkkijä

...

Kontrollinohjausmerkit kirjoitetaan lainausmerkkien sisään.

Esim.

Code Block

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.

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

Esimerkkejä

Kokonaislukumuuttujan (int) tulostus:

Code Block
int auton_nopeus=120; // km/h
printf("Auton nopeus on %d", auton_nopeus);

...

Useamman muuttujan tulostus:

Code Block
char Juttu[] = "tulostan lukuja"; // Merkkijonon luominen
int Luku = 5;
float Reaaliluku = 45.7;
printf("\nJuttujaJuttuja: %s, numeroita %d, Reaalilukuja %f\n", Juttu, Luku, Reaaliluku);

...

No Format
Juttuja: tulostan lukuja, numeroita 5, Reaalilukuja 45.7

...

Esimerkki, jossa on käytetty printf()-

...

funktion eri muotoja sekä tyypinmuunnoksia jne.

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

         void main(void)
         {
                 double Reaaliluku;
              int    int Kokonaisluku, Laskuri=0;

                 char Merkkeja[100];

                 char char Merkki;

                  // silmukka, jossa ollaan niin kauan kuin käyttäjä syöttää luvun 555

              while    while(Kokonaisluku != 555)

                  {

                     system        system("cls"); // putsataan ruutu

                     printf        printf("Anna reaaliluku: ");

                     do

                             do
        { // tieto näppikseltä
                         Merkki=Merkki = getche(); // laitetaan Merkki, Merkkeja vektoriin
                         Merkkeja       Merkkeja[Laskuri] = Merkki;
                         Laskuri       Laskuri=Laskuri+1; // lisätään paikkaa vektorissa
                            } while (Laskuri<8Laskuri < 8 && Merkki != 13);

                             //päätetään Päätetään merkkijono

                            Merkkeja[Laskuri] = '\0';

                            Laskuri Laskuri= 0;

                             //muutetaan Muutetaan merkkijono reaaliluvuksi

                     Reaaliluku        Reaaliluku = atof(Merkkeja);

                     printf        printf("\nReaaliluku on %.3f ",Reaaliluku);

                             // Muutetaan reaaliluku kokonaisluvuksi

                            Kokonaisluku Kokonaisluku= (int) Reaaliluku;

                     printf        printf("\nKokonaisluku on %d ",Kokonaisluku);

                             // Tulostus 16-kantaisena lukuna

                     printf        printf("\nHeksaluku on %x ",Kokonaisluku);

                             // Tulostus 8-kantaisena lukuna

                     printf        printf("\nOktaaliluku on %o ",Kokonaisluku);

                     printf        printf("\nPaina Enter");

                     getch        getch();

                   }

         }