Article originellement écrit par Rajendra David pour http://blog.emax.ath.cx le lundi 12 février 2007 à 21:19
Pour ceux qui ont, comme moi, du mal avec cette fonction et son formatage
La fonction printf
- Syntaxe :
#include
#int printf( const char *format [, arg [, arg]...]); - Description :Elle permet l’écriture formatée sur le flux standard de sortie stdout (l’écran par défaut).La chaîne de caractères format peut contenir à la fois :
- Des caractères à afficher,
- Des spécifications de format.
Il devra y avoir autant d’arguments à la fonction printf qu’il y a de spécifications de format.
- Valeur retournée :le nombre d’octets effectivement écrits ou la constante EOF (-1) en cas d’erreur.
- Spécificateurs de format :ils sont introduites par le caractère % et se terminent par le caractère de type de conversion suivant la syntaxe suivante :
% [drapeaux] [largeur] [.precision] [modificateur] type
-
- drapeaux :
drapeaux Signification rien justifié à droite et complété à gauche par des espaces – justifié à gauche et complété à droite par des espaces + les résultats commencent toujours par le signe + ou – espace le signe n’est affiché que pour les valeurs négatives # forme alternative. Si le type de conversion est :
c,s,d,i,u : sans effet
o : un 0 sera placé devant la valeur
x, X : 0x ou 0X sera placé devant la valeur
e, E, f : le point décimal sera toujours affiché
g, G : même chose que e ou E, mais sans supprimer les zéros à droite - largeur : elle précise la nombre de caractères n qui seront affichés.Si la valeur à afficher dépasse la taille de la fenêtre ainsi définie, C utilise quand même la place nécessaire.
largeur Effet sur l’affichage n affiche n caractères, complété éventuellement par des espaces 0n affiche n caractères, complété éventuellement à gauche par des 0 * l’argument suivant de la liste fournit la largeur - precision : elle précise pour :
- un entier, le nombre de chiffres à afficher
- un réel, le nombre de chiffres de la partie décimale à afficher (avec arrondi)
- les chaînes, le nombre maximum de caractères à afficher.
.precision Effet sur l’affichage rien précision par défaut :
d,i,o,u,x : 1 chiffre
e, E, f : 6 chiffres pour la partie décimale..0 d,i,o,u,x : précision par défaut
e, E, f : pas de point décimal.n n caractères au plus * l’argument suivant de la liste contient la précision - modificateur : Il précise comment sera interprété l’argument.
Modificateur interprétation comme h un entier de type short (d,i,o,u,x,X) l un entier de type long (d,i,o,u,x,X) L un réel de type long double (e,E,f,g,G) - type : type de conversion de l’argument.
Type Format de la sortie d ou i entier décimal signé o entier octal non signé u entier décimal non signé x entier hexadécimal non signé X entier hexadécimal non signé en majuscules f réel de la forme [-]dddd.ddd e réel de la forme [-]d.ddd e [+/-]ddd E comme e mais l’exposant est la lettre E g format e ou f suivant la précision G comme g mais l’exposant est la lettre E c caractère s affiche les caractères jusqu’au caractère nul ‘\0’
ou jusqu’à ce que la précision soit atteintep pointeur
- drapeaux :
- Exemple :
#include
main() { int nbre = 5; char *chaine = "Le langage C"; long prix = 12.0L; long double result = prix * nbre; printf("Bonjour\n"); printf("Nombre %d prix %ld Total %9ld\n",nbre, prix, prix * nbre); printf("%s est facile\n", chaine); printf("%8.2Lf \n", result); printf("%*.*Lf \n", 8, 2, result); /* equivalent a %8.2Lf */ printf("\n"); /* affichage du caractère % */ return 0; } /*-- résultat de l'exécution ------------------------------------ Bonjour Nombre 5 prix 12 Total 60 Le langage C est facile 60.00 60.00 -----------------------------------------------------------------*/ - Exemple d’utilisation des formats numériques :
instruction C résultat printf(« |%d|\n »,12345); |12345| printf(« |%+d|\n »,12345); |+12345| printf(« |%8d|\n »,12345); | 12345| printf(« |%8.6d|\n »,12345); | 012345| printf(« |%x|\n »,255); |ff| printf(« |%X|\n »,255); |FF| printf(« |%#x|\n »,255); |0xff| printf(« |%f|\n »,1.23456789012345); |1.234568| printf(« |%10.4f|\n »,1.23456789); | 1.2346|
source http://membres.lycos.fr/dancel/c/c60_10.htm
(cherchez pas, c’est le même site)