printf
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
printf("muotoilumerkkijono", muuttuja1, muuttuja2, ...); // ... tarkoittaa mahdollisia muita muuttujia
, jossa muotoilumerkkijono muodostuu seuraavista (yhdestä tai useammasta):
muotoilu |
tyyppi |
selitys |
||
---|---|---|---|---|
%c |
char/int |
yksi merkki |
||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="d6ecb8e3-d5a7-41ff-9a0f-6364e803692c"><ac:plain-text-body><![CDATA[ |
%s |
char[] |
merkkijono (päättyy NULL-merkkiin) |
]]></ac:plain-text-body></ac:structured-macro> |
%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.
Huom
Parametrien ja %-merkkien lukumäärä tulisi olla sama!
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.
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:
int auton_nopeus=120; // km/h printf("Auton nopeus on %d", auton_nopeus);
Useamman muuttujan tulostus:
char Juttu[] = "tulostan lukuja"; // Merkkijonon luominen int Luku = 5; float Reaaliluku = 45.7; printf("Juttuja: %s, numeroita %d, Reaalilukuja %f\n", Juttu, Luku, Reaaliluku);
Tuloste on:
Juttuja: tulostan lukuja, numeroita 5, Reaalilukuja 45.7
Esimerkki, jossa on käytetty printf()-funktion eri muotoja sekä tyypinmuunnoksia jne.
/* 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(); } }