Domov / Práca na internete / Príklady php printf. Formátovanie výstupných funkcií v PHP. Funkcie spúšťania PHP kódu na stránke

Príklady php printf. Formátovanie výstupných funkcií v PHP. Funkcie spúšťania PHP kódu na stránke

(PHP 4, PHP 5, PHP 7)

sprintf - Vráti naformátovaný reťazec

Zoznam parametrov

Formátovací reťazec pozostáva z nuly alebo viacerých príkazov: obyčajných znakov (okrem % ), ktoré sa skopírujú priamo do výsledného reťazca a deskriptory transformácie, z ktorých každý je nahradený jedným z parametrov. Týka sa to oboch sprintf(), a do printf().

Každý špecifikátor konverzie pozostáva zo znaku percenta ( % ), za ktorým nasleduje jeden alebo viacero ďalších prvkov (v poradí, v akom sú tu uvedené):

  1. Voliteľné deskriptor znakov, ktorá označuje, ako sa na číslo použije znamienko (- alebo +). V predvolenom nastavení sa používa iba znamienko mínus, ak je číslo záporné. Tento špecifikátor spôsobuje, že kladné čísla zobrazujú aj znamienko plus a bol pridaný v PHP 4.3.0.
  2. Voliteľné špecifikátor výplne, ktorý určuje, ktorý znak sa použije na vyplnenie výsledku na požadovanú dĺžku. Môže to byť priestor resp 0 . Predvolená hodnota je priestor. Alternatívny znak možno zadať pomocou jednej úvodzovky ( " ). Pozrite si príklady nižšie.
  3. Voliteľné deskriptor zarovnania, ktorý určuje zarovnanie vľavo alebo vpravo. Štandardne je zarovnaný doprava, - používa sa na zarovnanie doľava.
  4. Voliteľné číslo špecifikátor šírky, ktorý určuje minimálny počet znakov, ktoré bude výsledok tejto konverzie obsahovať.
  5. Voliteľné deskriptor presnosti, špecifikovaný ako bodka (.""), za ktorou nasleduje voliteľný desatinný reťazec, ktorý určuje, koľko desatinných miest sa má zobraziť pre čísla s pohyblivou rádovou čiarkou. Pri použití s ​​reťazcami funguje tento špecifikátor ako bod rezu, ktorý nastavuje maximálny počet znakov. Môžete tiež zadať symbol použitý na dokončenie čísla medzi bodkou a číslom.
  6. Špecifikátor typu, ktorý určuje, ako sa má zaobchádzať s dátovým typom argumentu. Platné typy:

    • % - symbol percenta. Argument sa nepoužíva.
    • b- argument sa považuje za celé číslo a výstup je ako binárne číslo.
    • c- s argumentom sa zaobchádza ako s celým číslom a výstupom je ako znak so zodpovedajúcim kódom ASCII.
    • d- s argumentom sa zaobchádza ako s celým číslom a výstupom je ako desiatkové číslo so znamienkom.
    • e- argument sa interpretuje ako číslo vo vedeckom zápise (napríklad 1,2e+2). Špecifikátor presnosti udáva počet desatinných miest od PHP 5.2.1. V skorších verziách uvádzal počet platných číslic (o jedno znamienko menej).
    • E- podobný %e, ale používa veľké písmeno (napríklad 1.2E+2).
    • f- s argumentom sa zaobchádza ako s číslom s pohyblivou rádovou čiarkou a je tiež výstupom v závislosti od miestneho nastavenia.
    • F- s argumentom sa zaobchádza ako s číslom s pohyblivou rádovou čiarkou a je tiež výstup, ale bez závislosti od miestneho nastavenia. Dostupné od PHP 4.3.10 a PHP 5.0.3.
    • g %e A %f.
    • G- vyberie najkratší záznam z %E A %f.
    • o- argument sa považuje za celé číslo a výstup je ako osmičkové číslo.
    • s- argument sa považuje za reťazec.
    • u- s argumentom sa zaobchádza ako s celým číslom a výstupom je ako desiatkové číslo bez znamienka.
    • X- s argumentom sa zaobchádza ako s celým číslom a výstupom je ako hexadecimálne číslo (malé písmená).
    • X- s argumentom sa zaobchádza ako s celým číslom a výstupom je ako hexadecimálne číslo (veľkými písmenami).

Premenné sa skonvertujú na vhodný typ pre špecifikátor:

Manipulácia s typom
Typ Špecifikátor
reťazec s
celé číslo d, u, c, o, X, X, b
dvojitý g, G, e, E, f, F

Pozornosť

Pokus o použitie kombinácie reťazcov a špecifikátorov šírky s kódovaním, ktoré vyžaduje viac ako jeden bajt na znak, môže viesť k neočakávaným výsledkom.

Formátovací reťazec podporuje číslovanie a zmenu poradia parametrov. Napríklad:

Príklad #1 Zmena poradia parametrov

$num = 5 ;
$ umiestnenie = "strom" ;

$formát = "%d opíc sedí na %s";

?>

Tento kód zobrazí „5 opíc sediacich na strome“. Teraz si predstavte, že formátovací reťazec je obsiahnutý v samostatnom súbore, ktorý sa potom preloží do iného jazyka, a prepíšeme ho takto:

Príklad č. 2 Zmena poradia parametrov

$ format = "Na %s sedí %d opíc";
echo sprintf (formát $, $ číslo, $ umiestnenie);
?>

Vyskytol sa problém: poradie špecifikátorov konverzie sa nezhoduje s poradím argumentov. Nechceme meniť kód a musíme špecifikovať, ktorý argument zodpovedá ktorému konverznému špecifikátoru.

Príklad č. 3 Zmena poradia parametrov

$ format = „Na %2$s sedí %1$d opíc“;
echo sprintf (formát $, $ číslo, $ umiestnenie);
?>

Číslovanie argumentov má ďalšie využitie: umožňuje vytlačiť rovnaký argument viackrát bez toho, aby sa funkcii odovzdávali ďalšie parametre.

Príklad #4 Zmena poradia parametrov

$ format = „Na %2$s sedí %1$d opíc.
Je skvelé, že %2$s sedí na %1$d opiciach.“
;
echo sprintf (formát $, $ číslo, $ umiestnenie);
?>

Pri zmene poradia parametrov deskriptor polohy n$ musí prísť hneď za znakom percenta ( % ) pred všetkými ostatnými deskriptormi, ako je uvedené v príklade nižšie.

Príklad č. 5 Určenie doplnkového znaku

echo sprintf ("%".9d\n" , 123 );
echo sprintf ("%".09d\n" , 123 );
?>

123 000000123

Príklad č. 6 Použitie špecifikátora polohy a v spojení s inými deskriptormi

$ format = "Na %2$s sedí %1$04d opíc";
echo sprintf (formát $, $ číslo, $ umiestnenie);
?>

Výsledok spustenia tohto príkladu:

0005 opíc sediacich na strome

Komentujte:

Uskutočnil sa pokus použiť špecifikátor polohy väčší ako PHP_INT_MAX, spôsobí, že funkcia vygeneruje varovanie sprintf() .

Pozornosť

The cšpecifikátor typu ignoruje výplň a šírku

Návratové hodnoty

Vráti reťazec naformátovaný podľa formátu .

Príklady

Príklad č. 7 sprintf(): výplň nulami

$n = 43951789;
$u = - 43951789;
$c = 65; // ASCII 65 je "A"

// všimnite si, že dvojité %% je výstup ako jeden "%"
printf ("%%b = "%b"\n" , $n ); // binárne zobrazenie
printf ("%%c = "%c"\n" , $c ); // vypíše ascii znak, podobný funkcii chr().
printf ("%%d = "%d"\n" , $n ); // bežné celé číslo
printf ("%%e = "%e"\n" , $n ); // vedecká notácia
printf ("%%u = "%u"\n" , $n ); // celočíselné vyjadrenie kladného čísla bez znamienka
printf ("%%u = "%u"\n" , $u ); // celá reprezentácia záporného čísla bez znamienka
printf ("%%f = "%f"\n" , $n ); // reprezentácia čísla s pohyblivou rádovou čiarkou
printf ("%%o = "%o"\n" , $n ); // osmičkové znázornenie
printf ("%%s = "%s"\n" , $n ); // riadok
printf ("%%x = "%x"\n" , $n ); // hexadecimálne zobrazenie (malé písmená)
printf ("%%X = "%X"\n" , $n ); // hexadecimálne zobrazenie (veľké písmená)

Printf ("%%+d = "%+d"\n" , $n ); // deskriptor znamienka s kladným celým číslom
printf ("%%+d = "%+d"\n" , $u ); // deskriptor znamienka so záporným celým číslom
?>

Výsledok spustenia tohto príkladu:

%b = "1010011110101001010101101" %c = "a" %d = "43951789" %e = "4,39518e+7" %u = "43951789" %U = "4251015507" 55 " %s = "43951789" %x = "29ea6ad" %X = "29EA6AD" %+d = "+43951789" %+d = "-43951789"

Príklad č. 8 printf(): reťazcové deskriptory

$s = "opica" ;
$t = "veľa opíc" ;

Printf("[%s]\n" , $s ); // normálny linkový výstup
printf ("[%10s]\n" , $s ); // zarovnanie doprava s medzerami
printf ("[%-10s]\n" , $s ); // zarovnanie doľava s medzerami
printf ("[%010s]\n" , $s ); // zero padding funguje aj s reťazcami
printf ("[%"#10s]\n" , $s ); // použite svoj vlastný doplnkový znak "#".
printf ("[%10.10s]\n" , $t ); // zarovnanie doľava s orezaním 10 znakov
?>

Vytlačí reťazec, hodnotu premennej alebo výraz.
Syntax:

Tlačiť (reťazec arg)

Funkcia print() vypíše argument arg, ktorým môže byť premenná alebo výraz.

vsprintf()

Vráti naformátovaný reťazec (PHP 4 >= 4.1.0, PHP 5)

Popis:

String vsprintf (formát reťazca, argumenty poľa)

Táto funkcia je podobná funkcii sprintf(), ale vyžaduje pole a nie premenný počet argumentov.

Vytlačí jednu alebo viac hodnôt.
Syntax:

Echo(reťazec arg1, reťazec ...)

Funkcia echo() zobrazuje hodnoty uvedených parametrov.
echo() je v skutočnosti jazyková konštrukcia, takže nevyžaduje zátvorky, aj keď sa použije viacero argumentov.
echo "Zalomenia riadkov v kóde sú uložené a použité vo výstupe."
"aby sa zabránilo tomuto použitiu."
"operátor zreťazenia";

Vypíšte naformátovaný reťazec.
Syntax:

Int printf (formát reťazca [, zmiešané argumenty, ...]);

Robí to isté ako sprintf(), len výsledný reťazec sa nevracia, ale posiela sa do prehliadača používateľa.

Vykonáva formátovanie reťazca s premennou substitúciou.
Syntax:

Sprintf($format [,args, ...])

Táto funkcia vracia reťazec vytvorený z formátovacieho reťazca obsahujúceho niektoré špeciálne znaky, ktoré budú neskôr nahradené hodnotami zodpovedajúcich premenných v zozname argumentov.
Formát $format reťazec môže obsahovať formátovacie príkazy, pred ktorými je znak %.
Všetky ostatné znaky sa skopírujú do výstupného reťazca tak, ako sú. Každý špecifikátor formátu (to znamená znak % a nasledujúce príkazy) sa zhoduje s jedným parametrom špecifikovaným za parametrom $format. Ak potrebujete umiestniť % do textu ako bežný symbol, musíte ho zdvojnásobiť:

Echo sprintf("Percento bolo %d%%",$percento);

Každý špecifikátor formátu obsahuje maximálne päť prvkov (v poradí, v akom sa zobrazujú za znakom %):

Voliteľný špecifikátor veľkosti poľa, ktorý určuje, koľko znakov bude alokovaných pre výstupnú hodnotu.
Ako zástupné znaky (ak je hodnota menšia ako veľkosť poľa na jej zobrazenie)
možno použiť medzeru alebo 0, predvolená hodnota je medzera. Môžete zadať akýkoľvek iný výplňový znak, ak ho zadáte do formátovacieho reťazca, pred ktorým bude apostrof.
Voliteľný špecifikátor zarovnania, ktorý určuje, či bude výsledok zarovnaný napravo alebo naľavo od poľa. Predvolené je zarovnanie doprava, ale zarovnanie doľava môžete určiť zadaním symbolu - (mínus).

Voliteľné číslo, ktoré určuje veľkosť poľa na zobrazenie hodnoty. Ak sa výsledok nenachádza v poli, bude „presahovať“ okraje tohto poľa, ale nebude skrátený.
Voliteľné číslo, pred ktorým je bodka ".", ktoré určuje, koľko desatinných miest bude vo výslednom reťazci.
Tento špecifikátor sa berie do úvahy iba vtedy, ak sa vydáva číslo s pohyblivou rádovou čiarkou, inak sa ignoruje.
Nakoniec požadovaný (poznámka - jediný povinný!) špecifikátor typu hodnoty, ktorá bude umiestnená vo výstupnom reťazci:

b - ďalší argument zo zoznamu sa vypíše ako binárne celé číslo
c - zobrazí sa symbol s kódom uvedeným v argumente
d - celé číslo
f - číslo s pohyblivou rádovou čiarkou
o - osmičkové celé číslo
s - reťazec znakov
x - hexadecimálne celé číslo s malými písmenami a-z
X je hexadecimálne celé číslo s veľkými písmenami A-Z

Tu je postup, ako určiť presnosť čísel s pohyblivou rádovou čiarkou:

$peniaze1 = 68,75;
$peniaze2 = 54,35;
$peniaze = $peniaze1 + $peniaze2;
// echo $money vypíše "123.1"...
$formatted = sprintf("%01.2f", $peniaze);
// echo $formatted vypíše "123.10"!

Tu je príklad výstupu celého čísla, ktorému predchádza požadovaný počet núl:

$isodate=sprintf("%04d-%02d-%02d",$rok,$mesiac,$deň);

Interpretuje reťazec podľa formátu a zadáva hodnoty do premenných.

Syntax:

Zmiešané sscanf(reťazec reťazec, formát reťazca [, reťazec var1 ...])

Funkcia sscanf() je opakom funkcie printf().

Interpretuje reťazec str podľa formátu, podobne ako špecifikácia printf().

Ak sú zadané iba dva argumenty, výsledné hodnoty sa vrátia v poli.

// získanie sériového čísla $serial = sscanf("SN/235-0001", "SN/%3d-%4d");
echo $serial*10000+$serial; // výstupy: 2350001
// a dátum výroby$date = "1. január 2000";
zoznam($mesiac, $deň, $rok) = sscanf($dátum, "%s %d %d");
echo "Dátum: $rok-".substr($mesiac,0,3)."-$deň";
// výstupy: 2000-jan-01

Pri zadávaní ďalších voliteľných parametrov (mali by byť odovzdané odkazom)

funkcia vráti ich číslo. Premenné, ktoré nedostávajú hodnoty, sa v návratovej hodnote neberú do úvahy.

// vygenerovanie XML záznamu z reťazca $auth = "765tLewis Carroll";
$n = sscan($auth,"%dt%s %s", &$id, &$prvy, &$posledny);
ozvena"
$first
$posledný
n";

fprintf()

Popis:

Int fprintf (handle zdroja, formát reťazca [, zmiešané argumenty])

Zapíše reťazec vytvorený pomocou formátovacieho reťazca do prúdu, ktorého handle je odovzdaný handle. Argument formátu je podrobne diskutovaný v popise funkcie sprintf().

fprintf(): výplň nulami


návrat;

fprintf($fp, "%04d-%02d-%02d", $rok, $mesiac, $deň);
// zapíše naformátovaný dátum do súboru date.txt
?>

fprintf(): formátovanie peňažných hodnôt

if (!($fp = fopen("currency.txt", "w")))
návrat;

$peniaze1 = 68,75;
$peniaze2 = 54,35;
$peniaze = $peniaze1 + $peniaze2;
// echo $money vypíše "123.1";
$len = fprintf($fp, "%01.2f", $peniaze);
// do súboru currency.txt sa zapíše reťazec "123.10".

echo "$len bajtov zapísaných do súboru currency.txt";
?>

vfprintf()

Zapíše naformátovaný reťazec do streamu (PHP 5)

Popis:

Int vfprintf (handle zdroja, formát reťazca, argumenty poľa)

Zapíše reťazec naformátovaný podľa formátu do zdroja toku určeného pomocou handle. Formátovanie sa vykonáva podobne ako pri sprintf().

Funguje rovnako ako fprintf(), ale namiesto premenlivého počtu argumentov používa pole argumentov.

Vráti dĺžku výstupného reťazca.

Pozri tiež: printf(), sprintf(), sscanf(), fscanf(), vsprintf() a number_format().
Príklady

vfprintf(): celé čísla vyplnené nulou

if (!($fp = fopen("date.txt", "w")))
návrat;

vfprintf($fp, "%04d-%02d-%02d", pole ($rok, $mesiac, $deň));
// zapíše formátovaný ISO dátum do date.txt
?>

vprintf()

Výstup naformátovaného reťazca (PHP 4 >= 4.1.0, PHP 5)

Popis:

Int vprintf (formát reťazca, argumenty poľa)

Vypíše hodnoty poľa args naformátované podľa argumentu formátu opísaného v dokumentácii funkcie sprintf().

Táto funkcia je podobná funkcii printf(), ale vyžaduje pole a nie premenný počet argumentov.

Vráti dĺžku výstupného reťazca

number_format()

Formátuje číslo s oddelením skupín (PHP 3, PHP 4, PHP 5)

Popis:

Formát čísla_reťazca (číslo s pohyblivou čiarou [, int desatinné miesta])

reťazec number_format (číslo s pohyblivou čiarou, int desatinné miesta, reťazec dec_point, reťazec tis.sep)

number_format() vráti naformátované číslo. Funkcia má jeden, dva alebo štyri argumenty (nie tri):

Ak zadáte iba jeden argument, číslo bude naformátované bez zlomkovej časti, ale s čiarkou ("") medzi skupinami číslic po 3.

Ak zadáte dva argumenty, číslo bude formátované s desatinnými miestami za bodkami (."") a čiarkami ("") medzi skupinami číslic po 3.

Ak sú zadané všetky štyri argumenty, číslo bude naformátované s desatinnými miestami za bodkou a so separátorom medzi skupinami číslic po 3, pričom sa ako desatinná čiarka použije bod dec_point a ako oddeľovač skupín sa použije desatinná čiarka.

Použije sa iba prvý znak reťazca millions_sep. Napríklad, ak zadáte foo ako millions_sep na formátovanie čísla 1000, number_format() vráti 1f000.

Príklad použitia number_format()

Vo Francúzsku je bežné používať 2 desatinné miesta (",") a medzeru (" ") ako oddeľovač skupín. Toto formátovanie sa získa pomocou nasledujúceho kódu:

$číslo = 1234,56;

// anglický formát (predvolené)
$english_format_number = format_cisla($cislo);
// 1,234

// francúzsky formát
$nombre_format_francais = number_format($number, 2, ",", " ");
// 1 234,56

$číslo = 1234,5678;

// Anglický formát bez oddeľovačov skupín
$english_format_number = number_format($number, 2, ".", "");
// 1234.57

printf("ako formátovať", parameter1, parameter2, ...) -- zobrazí výsledok na obrazovke

$vysledok= sprintf(..“, .., .., ...) - to isté, len riadok nie je na výstupe, ale umiestnený v $result

Citát z prekladu návodu ( PRÍKLADY nižšie :-):

sprintf

sprintf -- vráti naformátovaný reťazec
Popis
sprintf (formát reťazca, zmiešaný ...);

Vráti reťazec spracovaný podľa formátovacieho reťazca formát .

Formátovací reťazec obsahujúci nula alebo viac direktív: bežné znaky (okrem %), ktoré sa skopírujú priamo do výsledku a ktoré sa skopírujú priamo do výsledku a popisy zmien, z ktorých každý vykonáva špecifické akcie. To platí aj pre sprintf() a do printf()

Každé vyhlásenie o zmene pozostáva z nasledujúcich prvkov v poradí:

    Dodatočné špecifikátor výplne, ktorý hovorí, aké znaky sa použijú na doplnenie výsledku na správnu veľkosť reťazca. Môžu to byť medzery alebo 0 (nulový znak). Štandardne je vyplnený medzerami. Alternatívny znak výplne môže byť špecifikovaný jednou úvodzovkou ("). Pozrite si príklady nižšie.

    Dodatočné deskriptor zarovnania, ktorá hovorí, že výsledok by mal byť zarovnaný doľava alebo doprava. Štandardne je zarovnanie zarovnané doprava; - znak bude mať za následok zarovnanie doľava.

    Dodatočné špecifikátor šírky, ktorý hovorí, s koľkými znakmi (minimálne) je možné túto náhradu vykonať.

    Dodatočné deskriptor presnosti, ktorý hovorí, koľko desatinných miest sa má zobraziť pre čísla s pohyblivou rádovou čiarkou. Tento deskriptor nemá žiadny vplyv na iné typy ako double. (ďalšia užitočná funkcia na formátovanie čísel je number_format() .)

  1. Špecifikátor typu, ktorý hovorí, ako by sa malo zaobchádzať s dátovým typom argumentu. Možné typy:

    % je symbol percenta. Nevyžaduje sa žiadny argument.
    b - argument sa považuje za celé číslo a je reprezentovaný ako binárne číslo.
    c - argument sa považuje za celé číslo a predstavuje znak s hodnotou ASCII.
    d - argument sa považuje za celé číslo a predstavuje desiatkové číslo.
    f - argument sa považuje za dvojitý a predstavuje číslo s pohyblivou rádovou čiarkou.
    o - argument sa považuje za celé číslo a predstavuje osmičkové číslo.
    s - argument je interpretovaný a reprezentovaný ako reťazec.
    x - argument sa považuje za celé číslo a predstavuje hexadecimálne číslo (s malými písmenami).
    X - argument sa považuje za celé číslo a predstavuje hexadecimálne číslo (s veľkými písmenami).
Príklady

Príklad 2. sprintf: formátovanie meny

$peniaze1 = 68,75; $peniaze2 = 54,35; $peniaze = $peniaze1 + $peniaze2; // echo $money vypíše "123.1"; $formatted = sprintf("%01.2f", $peniaze); // echo $formatted vypíše "123.10"

Príklady

Všetko, čo je zapísané >>> medzi takýmito zátvorkami <<< je výsledkom funkcie (t.j. príklad výstupu na obrazovku) $s="MyString"; -> riadok %s $f=12345,6789; -> zlomkové %f $d=12345; -> celé číslo %d 10. sústava: 0123456789 16čísla %x 16. sústava: 0123456789abcdef 16čísla %X 16. sústava: 0123456789ABCDEF 8čísla %o 8. sústava: 0121číslo"sústava %b%45 číslo “, $ d); >>> 12345<<< просто выводим 16число: printf("%X",123456789); >>>75BCD15<<< просто выводим 2число: printf("%b",$d); >>> 11000000111001 <<< просто выводим дробное число: printf("%f",$f); >>> 12345.6789 <<< дополнение чисел нулями: printf("%010d",$d); >>> 0000012345 <<< округление до 3х знаков после запятой: printf("%.3f",$f); >>> 12345.679 <<< просто выводим число + посторонний текст: printf("посторонний%dтекст",$d); >>> outsider12345text<<< вывод нескольких переменных - последовательное перечисление printf("%d-%f-%s",$d,$f,$s); >>> 12345-12345.678900-MyString<<< выравнивание (ширина 20 символов) по правому краю, пустоту заполняем "_": printf("%"_20s",MyString); >>> ____________MyString<<< выравнивание по левому краю, пустоту заполняем "x": printf("%-"x20s",MyString); >>> MyStringxxxxxxxxxxxx<<<

Pozrite si ďalšie príklady tu:

Štandardná výstupná funkcia konzoly v C je printf. Jeho popis je obsiahnutý v hlavičkovom súbore stdio.h. Pomocou tejto funkcie môžete na výstup dát alebo užívateľských správ do konzoly. Jazyk C rozlišuje veľké a malé písmená. Napríklad dve funkcie printf a scanf sa líšia od ich podobných funkcií Printf a Scanf. Všetky znaky vo funkciách printf a scanf musia byť tiež napísané malými písmenami. Jeden z najjednoduchších príkladov C printf, ktorý tlačí známy pozdrav ahoj svet, je:

Definovanie funkcií skupiny printf v súbore "stdio.h"

Súbor "stdio.h" odkazuje na štandardnú vstupno/výstupnú knižnicu v jazyku C. Popis printf a podobných funkcií je v ňom uvedený nasledovne:

Uvedené funkcie načítavajú údaje z určitých umiestnení, konvertujú ich na reťazec znakov a odosielajú do špecifikovaných výstupných tokov.

Skupina funkcií printf

Funkcie skupiny printf v jazyku C sa používajú na spracovanie a formátovanie výstupu dát do štandardného toku. Okrem toho funkcie printf a vprintf zapisujú do štandardného prúdu stdout, funkcie fprintf a vfprintf posielajú hodnoty výstupných argumentov do niektorého zadaného výstupného prúdu a snprintf, sprintf, vsnprintf a vsprintf zapisujú údaje do znakového reťazca. Všetky uvedené funkcie fungujú pomocou formátovacieho reťazca špecifikujúceho požadované konverzie argumentov pre výstup.

Funkcia fprintf zapíše výsledok do výstupného streamu. Funkcia sprintf odošle výsledok do vyrovnávacej pamäte, ktorou je reťazec znakov. Správanie funkcie nie je definované, ak výstupný reťazec prekročí veľkosť poľa vyrovnávacej pamäte.

Funkcia snprintf, podobne ako predchádzajúca, zapisuje údaje do vyrovnávacej pamäte reťazcov. Výsledný reťazec znakov je ukončený nulou, pokiaľ bufsz (veľkosť vyrovnávacej pamäte) nie je nula. V opačnom prípade, ak je bufsz nula, potom sa do vyrovnávacej pamäte nevypíše nič a samotná vyrovnávacia pamäť môže byť nulový ukazovateľ, ale návratová hodnota (počet bajtov, ktoré mali byť zapísané) sa stále vypočítava.

Funkcia printf_s funguje v podstate rovnako ako printf, až na jednu vec. Hlavný rozdiel v popise printf_s v C a printf je nasledujúci: funkcia printf_s kontroluje formátovací reťazec na platné znaky, na rozdiel od printf, ktorý kontroluje iba formátovací reťazec na nulový ukazovateľ.

Pozrime sa bližšie na funkciu printf.

všeobecný popis

V C sa tlač znakov na štandardný výstup vykonáva volaním funkcie printf. Príkaz printf v C naformátuje množinu výstupných údajov a odošle ich do stdout. Hodnoty odovzdané funkcii ako argumenty sa vydávajú do konzoly podľa zadaného formátovacieho reťazca, ktorý zase obsahuje dva typy prvkov. Prvým typom sú znaky zobrazené na obrazovke a prvky, ktoré určujú vlastnosti formátu údajov a sú zodpovedné za spôsob prezentácie argumentov počas výstupu, patria do druhého typu.

Pri výstupe premenných s printf v jazyku C sú špecifické kombinácie znakov v reťazci argumentov nahradené údajmi konvertovanými podľa týchto znakov a každý typ údajov má svoje vlastné špecifikácie výstupného formátu.

Typ funkcie a návratová hodnota

Funkcia printf vracia celočíselnú hodnotu označujúcu počet znakov vytlačených na obrazovke. Môžete napríklad priradiť:

int k = printf("Ahoj %c %d %s", "a", 11, "všetci!"),

a potom hodnota premennej k môže ľahko určiť, či pri výstupe nastala chyba. Ak je vrátená záporná hodnota (ak funkcia vrátila "-1"), môžeme konštatovať, že pri jej vykonávaní došlo k chybe.

Syntax a závislosti

Ak chcete použiť funkciu printf, musíte vložiť hlavičkový súbor „stdio.h“ nasledovne:

#include

Šablóna funkcie vyzerá takto:

int printf(const char *formát, ...)

Elipsa odkazuje na zoznam argumentov, ktoré sa majú vypísať. Funkciu printf je možné použiť s rôznym počtom argumentov, ale prvý je vždy ohraničený dvojitými úvodzovkami na oboch stranách a každý ďalší musí byť od predchádzajúceho oddelený čiarkou. To, čo je napísané v úvodzovkách a nie je špecifikáciou formátu, sa vytlačí bez zmien, inak, ak sa nájde špecifikátor, skopíruje sa jeho typ hodnoty.

Formulár pre špecifikáciu formátu:

%[príznaky][šírka][.pozícia][dĺžka]typ

Formátovanie pomocou printf vo výstupných hodnotách C

Formátovací reťazec uvedený v zátvorkách za názvom volanej funkcie sa číta iba jedným smerom: zľava doprava a prvý argument zadaný za týmto riadkom sa vytlačí iba vtedy, ak sa nájde prvá špecifikácia. Až do konca formátovacieho reťazca spustia špecifikácie v ňom uvedené konverziu a tlač následných argumentov. Vo formátovacom reťazci sa so znakom medzery zaobchádza ako s normálnym znakom a vypíše sa, keď sa nepoužíva vo výraze špecifikácie formátu.

Znak "%" označuje začiatok špecifikácie výstupného formátu, za ktorým nasleduje kód formátu. Všetky polia v špecifikácii sú jednotlivé čísla alebo znaky, ktoré definujú podmienky formátovania.

Formátovaný printf výstup v C má svoje zvláštnosti. Ak počet uvedených argumentov prekročí počet špecifikácií formátu, preskočia sa a nevytlačia sa. V opačnom prípade, ak je v zozname argumentov, ktoré sa majú vytlačiť, viac špecifikácií formátu ako hodnôt, výsledok volania funkcie nie je určený.

Na explicitné označenie, ktorý argument sa má použiť, je možné použiť „%m$“ namiesto „%“ a „*m$“ namiesto „*“, pričom m je celočíselná desatinná hodnota označujúca pozíciu požadovaného argumentu (indexovanie začína na jednej).

možnosti

Príznaky používané vo formátovacom reťazci
VlajkaPopis
- Zarovnanie výsledku doľava vo výstupnom poli
+ Pri tlači číselnej hodnoty, ktorá má znamienko, sa pred kladnou hodnotou vynúti vytlačenie znaku „+“ (v predvolenom nastavení sa pred zápornou hodnotou vytlačí iba znak „-“).
0 Pre celé čísla a čísla s pohyblivou rádovou čiarkou sa na vyplnenie ľavých číslic používajú počiatočné nuly namiesto medzier, ak je šírka poľa väčšia ako dĺžka čísla. Pre celé čísla sa príznak ignoruje, ak je explicitne špecifikovaná presnosť. Pri ostatných konverziách pomocou tohto príznaku nie je správanie funkcie definované. Príznak "0" sa ignoruje, ak je prítomný príznak "-".
priestorAk výstupný výsledok podpísaného výrazu nezačína týmto znakom alebo je prázdny, k výsledku sa pridá medzera. Príznak "medzera" sa ignoruje, ak je prítomný príznak "+".
# Vykonáva sa alternatívna forma konverzie

Rôzne špecifikátory formátu

Špecifikátor formátuPoužitie a popis pre printf CTyp argumentu
% Písanie doslovného "%"
cVýstup jedného znaku. Argument sa skonvertuje na typ znaku bez znamienka. Pri použití modifikátora "l" sa argument skonvertuje na reťazec znakovnepodpísaný char
sVytlačte reťazec znakov. Argumentom musí byť ukazovateľ na počiatočný prvok poľa znakovznak *
d
i
Tlač desiatkovej reprezentácie hodnoty celého čísla so znamienkomint
oVýstup osmičkovej reprezentácie celočíselnej hodnoty bez znamienkanepodpísaný int
X
X
Výstup hexadecimálnej reprezentácie celočíselnej hodnoty bez znamienka. Znaky "a", "b", "c", "d", "e", "f" sa používajú na prevod "x". A transformovať "X" - "A", "B", "C", "D", "E", "F"nepodpísaný int
uVýstupný desiatkový prevod bez hodnoty celého čísla so znamienkom. Ak sú konvertovaná hodnota aj presnosť 0, nevypíšu sa žiadne znakynepodpísaný int
f
F
Tlač desiatkovej reprezentácie čísla s pohyblivou rádovou čiarkou so znamienkomdvojitý
e
E
Výstupom je desiatkový vedecký zápis, zaokrúhlený a prevedený tak, aby pred desatinnou čiarkou bola jedna číslica a počet číslic za desatinnou čiarkou zodpovedal presnosti zobrazenia (predvolená presnosť je 6, a ak je zadaná 0, potom desatinný znak sa vôbec nevypisuje). Znak „e“ sa zobrazuje veľkými alebo malými písmenami v závislosti od prevodudvojitý
a
A
Výstup hexadecimálneho zobrazenia čísla s pohyblivou rádovou čiarkoudvojitý
g
G
Výstup v desiatkovej reprezentácii čísla s pohyblivou rádovou čiarkou alebo jeho desiatkovej exponenciálnej reprezentácii v závislosti od hodnoty a presnostidvojitý
nVráti počet prvkov vytlačených printf. Výsledok sa zapíše do premennej, na ktorú ukazuje argument. Špecifikácia nesmie obsahovať príznaky, šírku poľa ani presnosťint *
pVýstup ukazovateľaneplatné *

Modifikátor šírky poľa

Formátovací riadok v printf C môže zapísať celé číslo za znak percenta a pred príkaz format. Je to modifikátor šírky poľa a ovplyvňuje prezentáciu zobrazených údajov. Najmenšia šírka poľa určená pre hodnotu je určená týmto číslom a prítomnosť takéhoto modifikátora, ak je argument menší ako pole, ktoré je mu pridelené, spôsobí, že sa k výsledku pridajú medzery alebo nuly. Predvoleným zástupným symbolom je znak medzery, ale môžete ho nastaviť na nulu zadaním špecifikácie šírky. Modifikátor určuje minimálnu šírku a každá hodnota väčšia ako toto minimum sa vytlačí bez rušenia. Napríklad číslo pozostávajúce z menej ako ôsmich znakov a vytlačené so špecifikáciou "%08d" sa doplní na požadovaných osem znakov nulami.

Podobné modifikátory môžu tiež špecifikovať parametre presnosti alebo zarovnania.

Modifikátor presnosti

Modifikátor presnosti sa používa na určenie počtu desatinných miest, ktoré sa majú vytlačiť v číselnom vyjadrení. Ak chcete pridať modifikátor presnosti, musíte za špecifikáciu šírky poľa vložiť bodku a za ňou zadať požadovanú hodnotu presnosti. Modifikátor presnosti je definovaný pre formáty „e“, „f“, „a“, „E“, „A“ a „F“. Pri celých číslach modifikátor nastavuje počet zobrazovaných číslic, v prípade potreby pridáva k ľavej číslici nuly a pri zobrazovaní racionálnych čísel určuje požadovaný počet desatinných miest. V prípade reťazcových premenných určuje maximálnu dĺžku poľa pre výstup číslo za bodkou v modifikátore presnosti. Napríklad vzhľadom na špecifikáciu formátu "% 4.8s" bude výstupom reťazec, ktorého dĺžka je v rozsahu od štyroch do ôsmich znakov; ak sa prekročí, najvzdialenejšie znaky budú vynechané.

Iné modifikátory formátu

Predvolené zarovnanie je zarovnané vpravo, ale dá sa to zmeniť umiestnením znamienka „-“ za „%“. Táto špecifikácia formátu nastavuje zarovnanie doľava.

Okrem toho funkcia printf dokáže rozlíšiť medzi krátkymi a dlhými typmi celočíselných hodnôt, ktoré sa majú vytlačiť. Platné špecifikátory sú "o", "d", "u", "i", "x" a "X". Typ dlhej hodnoty je určený modifikátorom "l" a typ krátkej hodnoty modifikátorom "h". Napríklad pri výstupe dlhého celého čísla a krátkej hodnoty int bez znamienka sú špecifikácie formátu "%ld" a "%hu".

Príklady

1. Popis printf C a výsledky volania každej funkcie:

2. Zobrazte jednoduché dialógové hlásenie:

printf("správa");

3. Kód programu:

Na obrazovke sa vytlačia výrazy zadané pred špecifikáciami formátu, ako aj argumenty za formátovacím reťazcom. Výsledok vykonania vyššie uvedených funkcií printf C, popis výstupu:

Tento príklad ilustruje zobrazenie pomocou rôznych formátov pre reťazce, celočíselné premenné, znaky a čísla s pohyblivou rádovou čiarkou.

Štandardná vstupná funkcia scanf a príklady jej použitia

Funkcia scanf sa používa na čítanie vstupu z klávesnice. Popis printf a scanf v C je uvedený v hlavičkovom súbore "stdio.h".

scanf("špecifikátory formátu",&hodnota1,&hodnota2, ...);

Jednoduchý príklad práce s funkciou scanf:

#include

Pre formátovaný výstup v PHP Používajú sa dve skvelé funkcie: printf() A sprintf(). Majú pomerne veľa schopností, o ktorých budeme diskutovať v tomto článku.

Hneď poviem, že rozdiel medzi printf() A sprintf() len to, že prvý odošle reťazec priamo do výstupného prúdu (napríklad do prehliadača) a druhý ho vráti.

Parameter funkcie je reťazec, ktorý má znaky s %, nazývané špecifikátory, A znaky bez %, nazývané smernice. Direktívy zostávajú pri formátovaní nezmenené, ale špecifikátor vedie k nahradeniu iných parametrov funkcie (po riadku formátu).

Existuje niekoľko špecifikátorov, ktoré sú spojené do jednej skupiny (jedna spoločná % ), ktorého poradie je nasledovné:

  1. Špecifikátor výplne. Umožňuje vyplniť reťazec na zadanú veľkosť špecifickým znakom. Štandardne je týmto znakom medzera.
  2. Špecifikátor zarovnania. Tento špecifikátor vám umožňuje nastaviť zarovnanie riadkov doprava (predvolene) alebo doľava (ak zadáte " - ").
  3. Špecifikátor minimálnej šírky. Ak má výsledok kratší reťazec, vyplní sa znakmi zo špecifikátora výplne na zadanú šírku.
  4. Presný špecifikátor. Umožňuje určiť, koľko desatinných miest ponechať pre číslo s pohyblivou rádovou čiarkou.
  5. Špecifikátor typu. Tento špecifikátor určuje typ údajov, ktoré sa majú vydávať. Je ich 8, ale v praxi sa používajú tieto:
    • d- celé číslo v desiatkovom tvare.
    • f- číslo s pohyblivou rádovou čiarkou v desatinnom tvare.
    • s- čiara.

Pozrime sa na klasiku príklad pre výstup formátovaného dátumu:

$rok = 2012;
$mesiac = 9;
$deň = 28;
printf("Dátum zápisu: %02d.%02d.%04d", $deň, $mesiac, $rok);
?>

Nie je ťažké uhádnuť, že výsledkom bude nasledujúci riadok: " Dátum napísania článku: 28.09.2012". Všimnite si prosím, koľko skupín špecifikátorov, koľko parametrov sa prenáša okrem samotného formátu. Riadok " Dátum napísania článku:“ je smernica a zostáva nezmenená. Teraz sa pozrime ako príklad na druhú skupinu špecifikátorov, ktorá je zodpovedná za mesiac. Ostatné skupiny sú úplne identické.

  • %
  • 0 - znak, ktorým sa zadaný parameter vyplní na požadovanú šírku.
  • 2 - minimálna šírka. Ak je teda dĺžka riadku menšia, vyplní sa 0 .
  • d- bude vydaný ako celé číslo. Ak dáte napr. b(iný špecifikátor typu), potom sa zobrazí rovnaké číslo, ale v binárnom tvare.

Dám vám ďalší populárny príklad použitia funkcie printf (a sprintf()) spojené so zaokrúhľovaním čísel:

$x = 12,596123;
printf("%06.2f", $x); // Zobrazí sa "012.60".
?>

Pozrime sa na prvý argument funkcie printf():

  • % - začiatok skupiny špecifikátorov.
  • 0 - znak na vyplnenie na požadovanú dĺžku.
  • 6 - požadovaná dĺžka (do tejto dĺžky sa samozrejme započítava aj bod).
  • .2 - presnosť až 2 desatinné miesta.
  • f- typ čísel s pohyblivou rádovou čiarkou. V skutočnosti má zaokrúhľovanie zmysel len pre tento typ.

Ako môžeš vidieť, funkcie printf() a sprintf(). uľahčiť riešenie zdanlivo zložitých problémov. Preto ich rozhodne musíte mať vo svojom arzenáli.