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} |