Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.1. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π²Π²ΠΎΠ΄Π° Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° Π½Π° Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΈΠ»ΠΈ Ρ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ Π½Π° Π²Π΅ΡΡ Π½ΠΈΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈ ΡΠ΅ΠΊΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² arg[0].
7.2 Π€ΠΎΡΠΌΠ°ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ (printf)
Π€ΡΠ½ΠΊΡΠΈΡ printf ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠ΅ΠΊΡΡ.
int printf(char *format, arg1, arg2, β¦)
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ printf Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ: ΠΏΠΎΠ»Π½ΠΎΠ΅ Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π°Π½ΠΎ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ B.
Π€ΡΠ½ΠΊΡΠΈΡ printf ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ, ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅Ρ ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠ²ΠΎΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΡΠΌΠ°ΡΠ°. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Π½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
Π€ΠΎΡΠΌΠ°ΡΠ½Π°Ρ ΡΡΡΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²: ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ°ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° printf. ΠΡΠ±Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π·Π½Π°ΠΊΠΎΠΌ % ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ-ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ. ΠΠ΅ΠΆΠ΄Ρ % ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ-ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ (Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅) ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ:
β’ ΠΠ½Π°ΠΊ ΠΌΠΈΠ½ΡΡ, ΠΏΡΠ΅Π΄ΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡ ΠΊΡΠ°Ρ ΠΏΠΎΠ»Ρ.
β’ Π§ΠΈΡΠ»ΠΎ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΡΡΡΠ΅Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΠΈΠ½Ρ ΠΏΠΎΠ»Ρ. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠΎΠ»Π΅ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΠΈΡΠΈΠ½Ρ. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ»Π΅Π²Π° (ΠΈΠ»ΠΈ ΡΠΏΡΠ°Π²Π° ΠΏΡΠΈ Π»Π΅Π²ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅ΠΌ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ) Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ.
β’ Π’ΠΎΡΠΊΠ°, ΠΎΡΠ΄Π΅Π»ΡΡΡΠ°Ρ ΡΠΈΡΠΈΠ½Ρ ΠΏΠΎΠ»Ρ ΠΎΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠ½ΠΎΡΡΡ.
β’ Π§ΠΈΡΠ»ΠΎ (ΡΠΎΡΠ½ΠΎΡΡΡ), ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΡΡΡΠ΅Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΡΡΠΎΠΊΠ΅, ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ - Π΄Π»Ρ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡ - Π΄Π»Ρ ΡΠ΅Π»ΠΎΠ³ΠΎ.
β’ ΠΡΠΊΠ²Π° h, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ short, ΠΈΠ»ΠΈ l (Π»Π°ΡΠΈΠ½ΡΠΊΠ°Ρ Π±ΡΠΊΠ²Π° ell), Π΅ΡΠ»ΠΈ ΡΠ΅Π»ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ long.
Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ-ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ 7.1. ΠΡΠ»ΠΈ Π·Π° % Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΡΠΈΠΌΠ²ΠΎΠ»- ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ printf Π±ΡΠ΄Π΅Ρ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ. Π¨ΠΈΡΠΈΠ½Ρ ΠΈ ΡΠΎΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ *; Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠΈΠ½Ρ (ΠΈΠ»ΠΈ ΡΠΎΡΠ½ΠΎΡΡΠΈ) Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±Π΅ΡΠ΅ΡΡΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° (ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΈΠΏΠ° int). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ max ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· ΡΡΡΠΎΠΊΠΈ s, Π³ΠΎΠ΄ΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ Π·Π°ΠΏΠΈΡΡ:
printf("%.*s", max, s);
Π’Π°Π±Π»ΠΈΡΠ° 7.1 ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ printf
Π‘ΠΈΠΌΠ²ΠΎΠ» Π’ΠΈΠΏ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°; Π²ΠΈΠ΄ ΠΏΠ΅ΡΠ°ΡΠΈ d, i int; Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ o unsigned int; Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΠΎΠ΅ (octal) ΡΠ΅Π»ΠΎΠ΅ (Π±Π΅Π· Π½ΡΠ»Ρ ΡΠ»Π΅Π²Π°) x, X unsigned int; Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ (Π±Π΅Π· 0x ΠΈΠ»ΠΈ 0X ΡΠ»Π΅Π²Π°), Π΄Π»Ρ 10β¦15 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ abcdef ΠΈΠ»ΠΈ ABCDEF u unsigned int; Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ c int; ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» s char *; ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π΄ΠΎ Π·Π½Π°ΠΊΠ° \0, ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅, Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΡΠΎΡΠ½ΠΎΡΡΡΡ f double; [-]m.dddddd, Π³Π΄Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡ d Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠΎΡΠ½ΠΎΡΡΡΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π½ΠΎ 6) e, E double; [-]m.dddddde+xx ΠΈΠ»ΠΈ [-]m.ddddddE+xx, Π³Π΄Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡ d Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠΎΡΠ½ΠΎΡΡΡΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π½ΠΎ 6) g, G double; ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ %e ΠΈΠ»ΠΈ %E, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ -4, ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π΅Π½ ΡΠΎΡΠ½ΠΎΡΡΠΈ; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ %f. ΠΠ°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ Π½ΡΠ»ΠΈ ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ°Ρ Π΄Π΅ΡΡΡΠΈΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° Π½Π΅ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ p void *; ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ (ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ) % ΠΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ; ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΡΡΡ Π·Π½Π°ΠΊ %ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠΎΡΠΌΠ°ΡΠ½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π±ΡΠ»Π° ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½Π° Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ . ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΡΠΎΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΡΡΠΎΠΊ. ΠΠ°Π»Π΅Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΠ΅ΡΠ°ΡΡ ΡΡΡΠΎΠΊΠΈ "hello, world", ΡΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΈΠ· 12 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠΎΠ»Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°ΠΌΠ»Π΅Π½ΠΎ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡΠΌΠΈ, ΡΡΠΎΠ±Ρ Π±ΡΠ»Π° Π²ΠΈΠ΄Π½Π° Π΅Π³ΠΎ ΠΏΡΠΎΡΡΠΆΠ΅Π½Π½ΠΎΡΡΡ.
:%s: :hello, world:
:%10s :hello, world:
:%.10s: :hello, wor:
:%-10s: :hello, world:
:%.15s: :hello, world:
:%-15s: :hello, world :
:%15.10s: : hello, wor:
:%-15.10s: :hello, wor :
ΠΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅ΠΆΠ΅Π½ΠΈΠ΅: ΡΡΠ½ΠΊΡΠΈΡ printf ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠΈΠΏΠ°. ΠΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π΅ΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ Π½Π΅ Ρ Π²Π°ΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ Π½Π΅ ΡΠΎΠΌΡ ΡΠΈΠΏΡ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΠ°Π·Π½ΠΈΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π²ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡΡ :
printf(s); /* ΠΠΠΠΠ ΠΠ, Π΅ΡΠ»ΠΈ Π² s Π΅ΡΡΡ % */
printf("%s", s); /* ΠΠΠ ΠΠ Π²ΡΠ΅Π³Π΄Π° */
Π€ΡΠ½ΠΊΡΠΈΡ sprintf Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎ ΠΈ printf, Π½ΠΎ Π²ΡΠ²ΠΎΠ΄ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ Π² ΡΡΡΠΎΠΊΠ΅
int sprintf(char *string, char *format, arg1, arg2,β¦)
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅Ρ arg1, arg2 ΠΈ Ρ. Π΄. Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ format, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΏΠΈΡΡΠ²Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅, Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π½Π΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄, Π° Π² string. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΡΡΠΎΠΊΠ° string Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ, ΡΡΠΎΠ±Ρ Π² Π½Π΅ΠΉ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ»ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.2. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΡΠ°Π·ΡΠΌΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π»ΡΠ±ΠΎΠΉ Π²Π²ΠΎΠ΄. ΠΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΌΠ΅ΡΡ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ Π½Π΅Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΠΎΠΌ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ (Π² ΡΠΎΡΠΌΠ΅, ΠΏΡΠΈΠ½ΡΡΠΎΠΉ Π½Π° Π²Π°ΡΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π΅), ΠΎΠ±ΡΡΠ²Π°Ρ Π΄Π»ΠΈΠ½Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ.
7.3 Π‘ΠΏΠΈΡΠΊΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ
ΠΡΠΎΡ ΠΏΠ°ΡΠ°Π³ΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ printf. ΠΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΎΠ½Π° Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠ°ΠΊΠΈΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π±Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°Ρ Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠ½ΠΊΡΠΈΡ minprintf Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΎΠ½Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π·Π°Π΄Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΌΠ°Ρ ΡΡΡΠΎΠΊΠΎΠΉ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ; ΡΡΠΎ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΡΠΌΠ°ΡΠ½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ printf.
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ printf Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
int printf(char *fmt, β¦)
ΠΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΠ΅ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΈΡΠ»ΠΎ ΠΈ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ. ΠΠ½Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠΏΠΈΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ minprintf ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ
void minprintf(char *fmt, β¦)
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π²Π°ΡΡ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ printf.
ΠΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ minprintf Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°ΡΡΡΡ Π²Π΄ΠΎΠ»Ρ ΡΠΏΠΈΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², - Π²Π΅Π΄Ρ Ρ ΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π½Π΅Ρ Π΄Π°ΠΆΠ΅ ΠΈΠΌΠ΅Π½ΠΈ. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» βΉstdarg.hβΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π°Π±ΠΎΡ ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π³Π°ΡΡ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΊ ΠΌΠ°ΡΠΈΠ½Π΅, Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²Π΅Π·Π΄Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ².
Π’ΠΈΠΏ va_list ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²; Π² minprintf ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ ap (ΠΎΡ "argument pointer" - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½Ρ). ΠΠ°ΠΊΡΠΎΡ va_start ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ap) ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΡΠΊΠ°Π·ΡΠ²Π°Π»Π° Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ. Π va_start Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ap. Π‘ΡΠ΅Π΄ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ: ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠΎΡ ΠΌΠ°ΠΊΡΠΎΡ "ΠΎΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΡΡ" ΠΏΡΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅.
ΠΠ°ΠΊΡΠΎΡ va_arg Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ²ΠΎΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π΅ Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π° ap ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°Π΅Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ: Π½ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠΈΠΏΠ° ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π³Π° Π΄Π»Ρ Π²ΡΡ ΠΎΠ΄Π° Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΠ°ΠΊΡΠΎΡ va_end Π΄Π΅Π»Π°Π΅Ρ ΠΎΡΠΈΡΡΠΊΡ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. Π va_end ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°ΠΌΡΠΌ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΎΡΠ½ΠΎΠ²Ρ Π½Π°ΡΠ΅ΠΉ ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ prinf.
#include βΉstdarg.hβΊ
/* minprintf: ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ printf Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² */