Udostępnij za pośrednictwem


_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l

Drukuje sformatowane dane wyjściowe do standardowego strumienia wyjściowego i umożliwia określenie kolejności, w jakiej parametry są używane w ciągu formatu.

Składnia

int _printf_p(
   const char *format [,
   argument]...
);
int _printf_p_l(
   const char *format,
   _locale_t locale [,
   argument]...
);
int _wprintf_p(
   const wchar_t *format [,
   argument]...
);
int _wprintf_p_l(
   const wchar_t *format,
   _locale_t locale [,
   argument]...
);

Parametry

format
Formatowanie kontrolki.

argument
Argumenty opcjonalne.

locale
Ustawienia regionalne do użycia.

Wartość zwracana

Zwraca liczbę znaków wydrukowanych lub ujemną wartość, jeśli wystąpi błąd.

Uwagi

Funkcja _printf_p formatuje i drukuje serię znaków i wartości do standardowego strumienia wyjściowego. stdout Jeśli argumenty są zgodne z ciągiem format , format ciąg musi zawierać specyfikacje określające format danych wyjściowych argumentów (zobacz printf_p Parametry pozycyjne).

Różnica między elementami _printf_p i printf_s polega na tym, że _printf_p obsługuje parametry pozycyjne, co umożliwia określenie kolejności, w jakiej argumenty są używane w ciągu formatu. Aby uzyskać więcej informacji, zobacz printf_p Parametry pozycyjne.

_wprintf_p jest wersją o szerokim znaku _printf_p; zachowują się identycznie, jeśli strumień jest otwarty w trybie ANSI. _printf_p obecnie nie obsługuje danych wyjściowych do strumienia UNICODE.

Wersje tych funkcji z sufiksem _l są identyczne, z tą różnicą, że używają parametru ustawień regionalnych przekazanych zamiast bieżących ustawień regionalnych wątku.

Ważne

Upewnij się, że format nie jest to ciąg zdefiniowany przez użytkownika.

Jeśli format ciąg argumentNULLlub zawiera nieprawidłowe znaki formatowania, _printf_p a _wprintf_p funkcje wywołują nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, funkcja zwraca wartość -1 i ustawia wartość errnoEINVAL.

Mapowania procedur tekstu ogólnego

Procedura tchar.h _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tprintf_p _printf_p _printf_p _wprintf_p
_tprintf_p_l _printf_p_l _printf_p_l _wprintf_p_l

Wymagania

Procedura Wymagany nagłówek
_printf_p, _printf_p_l <stdio.h>
_wprintf_p, _wprintf_p_l <stdio.h> lub <wchar.h>

Konsola nie jest obsługiwana w aplikacjach platformy platforma uniwersalna systemu Windows (UWP). Standardowe dojścia strumienia skojarzone z konsolą programu stdin, stdouti i stderrmuszą zostać przekierowane, zanim funkcje czasu wykonywania języka C będą mogły ich używać w aplikacjach platformy UWP. Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Ważne

Począwszy od systemu Windows 10 w wersji 2004 (kompilacja 19041), printf rodzina funkcji drukuje dokładnie możliwe liczby zmiennoprzecinkowe zgodnie z regułami IEEE 754 dotyczącymi zaokrąglania. W poprzednich wersjach systemu Windows dokładnie reprezentowane liczby zmiennoprzecinkowe kończące się na "5" zawsze zaokrągla się w górę. IEEE 754 stwierdza, że muszą zaokrąglić do najbliższej parzysta cyfra (znana również jako "Zaokrąglanie Bankiera"). Na przykład oba printf("%1.0f", 1.5)printf("%1.0f", 2.5) elementy i powinny być zaokrąglone do 2. Wcześniej 1,5 zaokrągliłoby się do 2 i 2,5 do 3. Ta zmiana dotyczy tylko dokładnie możliwych do reprezentowania liczb. Na przykład 2,35 (który, gdy jest reprezentowany w pamięci, jest bliżej 2,350000000000000008) nadal zaokrągla się do 2,4. Zaokrąglanie wykonywane przez te funkcje jest teraz również zgodne z trybem zaokrąglania zmiennoprzecinkowego ustawionym przez fesetround. Wcześniej zaokrąglanie zawsze wybierało FE_TONEAREST zachowanie. Ta zmiana dotyczy tylko programów utworzonych przy użyciu programu Visual Studio 2019 w wersji 16.2 lub nowszej. Aby użyć starszego zachowania zaokrąglania zmiennoprzecinkowego, połącz się z elementem legacy_stdio_float_rounding.obj.

Przykład

// crt_printf_p.c
// This program uses the _printf_p and _wprintf_p
// functions to choose the order in which parameters
// are used.

#include <stdio.h>

int main( void )
{
   // Positional arguments
   _printf_p( "Specifying the order: %2$s %3$s %1$s %4$s %5$s.\n",
              "little", "I'm", "a", "tea", "pot");

   // Resume arguments
   _wprintf_p( L"Reusing arguments: %1$d %1$d %1$d %1$d\n", 10);

   // Width argument
   _printf_p("Width specifiers: %1$*2$s", "Hello\n", 10);
}
Specifying the order: I'm a little tea pot.
Reusing arguments: 10 10 10 10
Width specifiers:     Hello

Zobacz też

Obsługa obliczeń matematycznych i zmiennoprzecinkowych
We/Wy strumienia
ustawienia regionalne
fopen, _wfopen
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
fprintf, _fprintf_l, fwprintf, _fwprintf_l
fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
vprintf, funkcje