581


printf

stdio.h, cstdio

int printf(const char *format, ...);

Opis

Funkcja służy do wyświetlania tekstu na standardowym wyjściu, którym domyślnie jest ekran. Jako pierwszy parametr podajesz tzw. łańcuch formatujący (format). Jest to po prostu string w którym niektóre kody (sekwencje znaków) zostaną zastąpione wartościami pozostałych parametrów.

Na przykład mamy zmienne:

char *imie="Ala";
int wiek=5;
printf("%s ma %i lat.",imie,wiek);

Wyświetli następujący tekst:

Ala ma 5 lat.

Jak widzisz kod %s został zastąpiony wartością zmiennej imie, a %i wiek. Poniższa tabela zawiera wykaz znaków typu w zależności od typu parametru.

Znak typu

Wartość wyjściowa

Przykładowe typy parametrów

Przykład

d

Dziesiętna ze znakiem

int, long, long long

982

i

Dziesiętna ze znakiem

int, long, long long

982

o

Ósemkowa bez znaku

int, long, long long

1726

u

Dziesiętna bez znaku

unsigned int, unsigned long, unsigned long long

982

x

Szesnastkowa bez znaku, używa małych liter

int, long, long long, unsigned int, unsigned long, unsigned long long

3d6

X

Szesnastkowa bez znaku, używa wielkich liter

int, long, long long, unsigned int, unsigned long, unsigned long long

3D6

e

Liczba rzeczywista (dziesiętna) w postaci wykładniczej

float, double

3.45e+3

E

Liczba zmiennoprzecinkowa w postaci wykładniczej

float, double

3.45E+3

f

Zmiennoprzecinkowa

float, double

1.03.1961

g

Zmiennoprzecinkowa, działa jak e lub f zależności od precyzji

float, double

G

Zmiennoprzecinkowa, działa jak E lub f zależności od precyzji

float, double

c

Znak

char

A

s

Łańcuch znaków

char *, char []

Ala

n

Umieszcza we wskazanym miejscu liczbę dotychczas wysłanych znaków

int *

P

Wskaźnik, wyświetla adres

A100:0012


Podając parametry w łańcuchu trzeba pamiętać o możliwości konwersji. Na przykład:

char c='A';
printf("Znak%c ma kod %i",c,c);

Wyświetli:


Znak A ma kod 65

Dzieje się tak dlatego, że w drugim przypadku podając znak formatujący %i parametr (zmienna) c zostanie skonwertowana na int.
Do konwersji może dochodzić również w przypadku innych znaków formatujących i typów parametrów.


Funkcja printf pozwala również na dodatkowe formatowanie. Poniższa tabela przedstawia znaki modyfikujące rozmiar parametru. Należy je podawać przed znakiem formatującym, na przykład modyfikując znak d modyfikatorem l zamiast %d piszesz %ld.

Modyfikator

Działanie

Modyfikator znaku formatującego

h

Parametr traktuje się jakby był typu short int

d, i, o, u, x, X

l

Parametr traktuje się jakby był typu long int dla parametrów całkowitych i double dla zmiennoprzecinkowych

d, i, o, u, x, X
e, E, f, g, G

L

Parametr traktuje się jakby był typu long double dla parametrów zmiennoprzecinkowych

e, E, f, g, G


Pamiętaj, że czasem brak modyfikatora rozmiaru powoduje błędny wyświetlenie wartości zmiennej, choć jest ona prawidłowa. Możesz wówczas stracić wiele czasu zastanawiając się dlaczego np. wynik obliczeń jest błędny, gdy w rzeczywistości jest on prawidłowy, a został jedynie źle wyświetlony. Dotyczy to zwłaszcza wielkich wartości i jest skutkiem błędnej konwersji.

Możesz tez formatować wyświetlane liczby na przykład decydując ile miejsc po przycinku ma się wyświetlić. W przypadku liczb zmiennoprzecinkowych (znaki formatujące e, E, f, g, G) robisz to podając .n, gdzie n jest liczbą miejsc po przecinku, np.:
float x=10.2;
printf("x=%.3f\n",x);
Wyświetli:
x=10.200
czyli 3 miejsca po przecinku. Podając .0 pomijasz w ogóle część ułamkową. Możesz też wpisać, np.:
printf("x=%6.2f\n",x);
wówczas 6 będzie całkowitą liczbą znaków i zostaną one wyrównane do prawej strony:
x=10.20
Zauważ, że "10.20" to 5 znaków, zatem do sześciu znaków będzie uzupełnione spacjami.
Zastosowanie specyfikatora precyzji dla liczby całkowitej, spowoduje uzupełnienie brakujących miejsc zerami, np.:
int x=12;
printf("x=%.3i\n",x);
wyświetli:
x=012

Używając funkcji printf możliwe jest również justowanie (wyrównywanie) tekstu. Flagi służące do tego celu przedstawia poniższa tabela.

Flaga

Działanie

Flaga znaku formatującego

-

Wyrównuje wyświetlaną wartość do n znaków, uzupełniając brakujące miejsca spacjami po prawej stronie

X, x, E, e, f, G, g, d, i, u, s, c

+

Wyświetla znak "-" lub "+" zależnie od wartości

X, x, E, e, f, G, g, d, i, u

Spacja

Wyświetla znak "-" lub spację zależnie od wartości

X, x, E, e, f, G, g, d, i, u

#

W przypadku liczby całkowitej poprzedza ją zerem. Natomiast w przypadku liczby zmiennoprzecinkowej umieszcza przecinek niezależnie od jej wartości

X, x, E, e, f, G, g



Powyższe flagi można ze sobą dowolnie łączyć.

Tu możesz pobrać przykładowy programik pokazujący, jak przy pomocy funkcji printf wyświetlić tabelę.

Zwracana wartość

Funkcja printf zwraca ilość wysłanych znaków, natomiast w przypadku błędu wartość ujemną.
W zasadzie jest nieprawdopodobne aby we współczesnych czasach printf nie zadziałało, ale zawsze możesz zapisać:


if (printf(...)<0) reakcja na błąd


Można to też użyć do innych celów, na przykład:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int n;
char imie[20];

printf("Jak Ci na imie? ");
scanf("%s",imie);
n=printf("Witaj %s!\n",imie);
printf("Powitanie mialo %i znakow\n",n);
system("PAUSE");
return EXIT_SUCCESS;
}

Wynik działania programu może być na przykład taki:

Jak Ci na imie? Kuba
Witaj Kuba!
Powitanie mialo 12 znakow
Aby kontynuować, naciśnij dowolny klawisz . . .

Dlaczego 12 znaków a nie 11? Ponieważ na końcu znajduje się znak końca linii, czyli \n.

PRINTF i SCANF, czy CIN i COUT C++

Przykład użycia funkcji PRINTF i SCANF jako

alternatywnego (dla cin, cout) rozwiązania dla wprowadzania i

wyprowadzania danych z programu w języku C++. Artykuł zawiera przykładowy

program wraz z krótkim opisem najczęściej wykorzystywanych

sekwencji specjalnych. Znajdziesz tu szybką informację, jak użyć

powyższych funkcji w swoich programach w

miejsce popularniejszych CIN

i COUT.

Stosowanie PRINTF i SCANF jest z

pewnością trudniejsze, polecane jest przy

rozwiązywaniu algorytmów o dużej ilości danych wejściowych i

wyjściowych, gdyż znacznie poprawia szybkość tych operacji.

#include<conio.h>

#include<stdio.h>

int main()

}

printf("Program wyznacza miejsce zerowe rownania

liniowego.\n");

printf("Funkcja ma postac: f(x)=a*x+b\n");

int a,b;

printf("Podaj a: \t");

scanf("%d",&a);

*/

%d %f informacja dla kompilatora, jakiego typu

zmienna wczytujemy

dla int %d

dla float -> %f

%.2f liczba float zaokraglona do 2 miejc

dziesietnych

%4.2f liczba float 4 znaki w tym 2 dziesietne

/*

printf("Podaj b: \t");

http://lo1.lebork.pl - Liceum Ogólnokształcące Nr 1 w Lęborku - LO 1 Lębork Powered by Mambo Generated: 30 January, 2011, 13:25 scanf("%d",&b);

printf("Funkcja dla wprowadzonych danych: f(x)=%d",a);

printf("*x+%d\n",b);

float c=a, d=b;

if(a!=0)

}

printf("\nMIEJSCE ZEROWE FUNKCJI

X=%10.2f",-c/d);

{

else {printf("\nBRAK MIEJSC ZEROWYCH\n");}

getch();

return(0);

{

*/

dla printf:

\n - nowa linia

\t - tabulator poziomy

\b - znak cofania

\f - znak nowej strony

\v - tabulator pionowy

\? Znak zapytania

\' znak apostrofu

\" znak cudzysłowu

\ooo liczba ósemkowa

\xhh liczba szesnastkowa

/*

Uczniów pragnących

uzyskać więcej informacji odsyłąmy do licznych kursów

http://lo1.lebork.pl - Liceum Ogólnokształcące Nr 1 w Lęborku - LO 1 Lębork Powered by Mambo Generated: 30 January, 2011, 13:25internetowych. Przyszłym programistom szczególnie polecamy Młodzieżową

Akademię Informatyczną.



Wyszukiwarka

Podobne podstrony:
580 581
581
05 Prowadzenie negocjacjiid 581 Nieznany
581
581
581
2006 581 pjwstk lecture notes
581
581
cis 581 BPM example
581
PCB 581
581
581
581(1)

więcej podobnych podstron