printf, _printf_l, wprintf, _wprintf_l

Imprime une sortie mise en forme dans le flux de sortie standard. Des versions plus sécurisées de ces fonctions sont disponibles ; consultez printf_s, _printf_s_l, wprintf_s, _wprintf_s_l.

Syntaxe

int printf(
   const char *format [,
   argument]...
);
int _printf_l(
   const char *format,
   _locale_t locale [,
   argument]...
);
int wprintf(
   const wchar_t *format [,
   argument]...
);
int _wprintf_l(
   const wchar_t *format,
   _locale_t locale [,
   argument]...
);

Paramètres

format
Contrôle de format.

argument
Arguments facultatifs.

locale
Paramètres régionaux à utiliser.

Valeur de retour

Retourne le nombre de caractères imprimés ou une valeur négative si une erreur se produit. Si format a la valeur NULL, le gestionnaire de paramètres non valides est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, la fonction retourne -1 et définit errno avec la valeur EINVAL. Si EOF (0xFFFF) est rencontré dans argument, la fonction retourne -1.

Pour plus d’informations sur errno les codes d’erreur et , consultez errno, _doserrno, _sys_errlistet _sys_nerr.

Notes

La fonction printf met en forme et imprime une série de caractères et de valeurs dans le flux de sortie standard, stdout. Si les arguments suivent la chaîne format, la chaîne format doit contenir des spécifications qui déterminent le format de sortie des arguments. printf et fprintf se comportent de manière identique, sauf que écrit printf la sortie dans stdout plutôt que dans une destination de type FILE.

wprintf est une version à caractères larges de printf ; format est une chaîne de caractères larges. wprintf et printf se comportent de la même façon si le flux est ouvert en mode ANSI. printf ne prend actuellement pas en charge la sortie vers un flux UNICODE.

Les versions de ces fonctions avec le suffixe _l sont identiques, sauf qu'elles utilisent les paramètres régionaux passés au lieu des paramètres régionaux du thread actuel.

L’argument format se compose de caractères ordinaires, de séquences d’échappement et (si des arguments suivent format) de spécifications de format. Les caractères ordinaires et les séquences d’échappement sont copiés dans stdout dans leur ordre d’apparition. Par exemple, la ligne suivante :

printf("Line one\n\t\tLine two\n");

génère cette sortie :

Line one
        Line two

Les spécifications de format commencent toujours par un symbole de pourcentage (%) et sont lues de gauche à droite. Quand la fonction printf rencontre la première spécification de format (le cas échéant), elle convertit la valeur du premier argument après format et la sort en conséquence. La deuxième spécification de format entraîne la conversion et la sortie du deuxième argument, et ainsi de suite. S’il y a plus d’arguments que de spécifications de format, les arguments en trop sont ignorés. Les résultats ne sont pas définis s’il n’y a pas suffisamment d’arguments pour toutes les spécifications de format.

Important

Assurez-vous que format n'est pas une chaîne définie par l'utilisateur.

Mappages de routines de texte générique

Tchar.h Routine _UNICODE et _MBCS non défini _MBCS Défini _UNICODE Défini
_tprintf printf printf wprintf
_tprintf_l _printf_l _printf_l _wprintf_l

Configuration requise

Routine En-tête requis
printf, _printf_l <stdio.h>
wprintf, _wprintf_l <stdio.h> ou <wchar.h>

La console n’est pas prise en charge dans les applications plateforme Windows universelle (UWP). Les handles de flux standard associés à la console, stdin, stdoutet stderrdoivent être redirigés avant que les fonctions d’exécution C puissent les utiliser dans les applications UWP. Pour plus d’informations sur la compatibilité, consultez Compatibility.

Important

À compter de Windows 10 version 2004 (build 19041), la printf famille de fonctions imprime des nombres à virgule flottante représentant exactement selon les règles IEEE 754 pour l’arrondi. Dans les versions précédentes de Windows, les nombres à virgule flottante représentant exactement se terminant par « 5 » s’arrondissaient toujours. IEEE 754 stipule qu’ils doivent arrondir au chiffre pair le plus proche (également appelé « Arrondi du banquier »). Par exemple, et printf("%1.0f", 2.5) doivent être printf("%1.0f", 1.5) arrondis à 2. Auparavant, 1,5 arrondissait à 2 et 2,5 arrondissaient à 3. Cette modification affecte uniquement les nombres représentables exactement. Par exemple, 2.35 (qui, lorsqu’il est représenté en mémoire, est plus proche de 2.350000000000000008) continue d’arrondir à 2.4. L’arrondi effectué par ces fonctions respecte désormais également le mode d’arrondi à virgule flottante défini par fesetround. Auparavant, l’arrondi choisissait FE_TONEAREST toujours le comportement. Cette modification affecte uniquement les programmes créés à l’aide de Visual Studio 2019 version 16.2 et ultérieures. Pour utiliser le comportement d’arrondi à virgule flottante hérité, liez avec legacy_stdio_float_rounding.obj.

Exemple

// crt_printf.c
// This program uses the printf and wprintf functions
// to produce formatted output.

#include <stdio.h>

int main( void )
{
   char     ch = 'h',
            *string = "computer";
   wchar_t  wch = L'w',
            *wstring = L"Unicode";
   int      count = -9234;
   double   fp = 251.7366;

   // Display integers
   printf( "Integer formats:\n"
           "   Decimal: %d  Justified: %.6d  "
           "Unsigned: %u\n",
           count, count, count, count );

   // Display decimals
   printf( "Decimal %d as:\n   Hex: %Xh  "
           "C hex: 0x%x  Octal: %o\n",
            count, count, count, count );

   // Display in different radixes
   printf( "Digits 10 equal:\n   Hex: %i  "
           "Octal: %i  Decimal: %i\n",
            0x10, 010, 10 );

   // Display characters
   printf("Characters in field (1):\n"
          "%10c%5hc%5C%5lc\n",
          ch, ch, wch, wch);
   wprintf(L"Characters in field (2):\n"
           L"%10C%5hc%5c%5lc\n",
           ch, ch, wch, wch);

   // Display strings
   printf("Strings in field (1):\n%25s\n"
          "%25.4hs\n   %S%25.3ls\n",
          string, string, wstring, wstring);
   wprintf(L"Strings in field (2):\n%25S\n"
           L"%25.4hs\n   %s%25.3ls\n",
           string, string, wstring, wstring);

   // Display real numbers
   printf("Real numbers:\n   %f %.2f %e %E\n",
          fp, fp, fp, fp );

   // Display pointer
   printf( "\nAddress as:   %p\n", &count);
}

Exemple de sortie

Integer formats:
   Decimal: -9234  Justified: -009234  Unsigned: 4294958062
Decimal -9234 as:
   Hex: FFFFDBEEh  C hex: 0xffffdbee  Octal: 37777755756
Digits 10 equal:
   Hex: 16  Octal: 8  Decimal: 10
Characters in field (1):
         h    h    w    w
Characters in field (2):
         h    h    w    w
Strings in field (1):
                 computer
                     comp
   Unicode                      Uni
Strings in field (2):
                 computer
                     comp
   Unicode                      Uni
Real numbers:
   251.736600 251.74 2.517366e+002 2.517366E+002

Address as:   0012FF3C

Voir aussi

Syntaxe de spécification de format : printf et wprintf fonctions
Prise en charge des fonctions mathématiques et à virgule flottante
E/S de flux
Paramètres régionaux
fopen, _wfopen
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
scanf, _scanf_l, wscanf, _wscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vprintf Fonctions
_set_output_format