Wiki Markup |
---|
h1. printf
|
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 | ||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="3363ff4f-e7b0-4ba4-ad2f-b21a26d656ad"><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.
Note | ||
---|---|---|
| ||
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.
Code Block |
---|
|| 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.
|
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 |
---|
{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); |
Useamman muuttujan tulostus:
Code Block |
---|
{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} |