PRINTF |
Impression avec format |
---|---|
Langage C | stdio.h |
Syntaxe
int printf(const char *texte,...); |
Paramètres
Nom | Description | ||
---|---|---|---|
texte | Ce paramètre permet d'indiquer le texte à afficher. Le format de chacun des spécificateur doit respecter le format suivant «%[drapeaux][largeur][.precision][longueur]specificateur». Il est a noter que un ou plusieurs des spécificateurs suivants peuvent être inclus dans le texte et il utilisera un argument supplémentaire pour chaque spécificateurs : | ||
Spécificateur | Description | Type de données | |
%c | Ce spécificateur indique d'insérer à cette position un caractère contenu dans la liste des arguments après le texte | char | |
%d | Ce spécificateur indique d'insérer à cette position un entier sous forme décimal contenu dans la liste des arguments après le texte | int | |
%f | Ce spécificateur indique d'insérer à cette position un nombre réel (nombre à virgule flottante) contenu dans la liste des arguments après le texte | float, double | |
%i | Ce spécificateur indique d'insérer à cette position un entier contenu dans la liste des arguments après le texte | int | |
%o | Ce spécificateur indique d'insérer à cette position un entier sous forme octal contenu dans la liste des arguments après le texte | int | |
%s | Ce spécificateur indique d'insérer à cette position une chaîne de caractères contenu dans la liste des arguments après le texte | char * | |
%x | Ce spécificateur indique d'insérer à cette position un entier sous forme hexadécimal contenu dans la liste des arguments après le texte | int | |
Il est possible d'ajouter une précision du nombre décimal afficher en insérant le nombre entre le symbole de pourcentage et la lettre. |
Retour
Valeur | Description |
---|---|
0 ou supérieur | Ces valeurs permettent d'indiquer que l'opération a réussis et indique le nombre correspond au nombre de caractères affichés. |
-1 ou inférieur | Ces valeurs permettent d'indiquer qu'une erreur s'est produite, il faudra consulter la fonction «ferror» pour davantage de détails. |
Description
Cette fonction permet d'effectuer l'écriture de texte selon un certain format sur la console (soit la sortie standard). En somme, puisque la concaténation de chaîne de caractères et de nombres n'est pas une chose facile en langage de programmation C, cette fonction permet donc de jumelé facilement du contenu de différentes chaînes de caractères et de nombres de caractères en seule fonction. Le premier paramètre (obligatoirement une chaîne de caractères) indique toujours le formatage à utiliser, tandis que les spécificateurs suivants «%s», «%i»,... seront remplacés par chacun des paramètres respectivement à partir du deuxième paramètre.
Algorithme
MODULE printf(format, list) currentParam ← 0 BOUCLE POUR i ← 0 JUSQU'A Longueur(format) - 1 SI '%' = format[i] ALORS i ← i + 1 EVALUER CAS format[i] CAS 'c': AFFICHER CARACTERE list[currentParam] currentParam ← currentParam + 1 CAS 'd': AFFICHER NOMBRE list[currentParam] currentParam ← currentParam + 1 CAS 'f': AFFICHER NOMBRE REEL list[currentParam] currentParam ← currentParam + 1 CAS 'i': AFFICHER ENTIER list[currentParam] currentParam ← currentParam + 1 CAS 's': AFFICHER CHAINE DE CARACTERES list[currentParam] currentParam ← currentParam + 1 CAS 'x': AFFICHER NOMBRE HEXADECIMAL list[currentParam] currentParam ← currentParam + 1 FIN EVALUER CAS SINON AFFICHER CARACTERE format[i] FIN SI FIN BOUCLE POUR |
Remarques
- Les caractères «...» de la syntaxe permettent d'indiquer un nombre variable de paramètres. Il s'agit donc d'une suite de valeurs de type de données quelconques, comme par exemple, une chaîne de caractères, des valeurs entières, réels,...
- Contrôle du nombre de paramètres : Si vous omettez de spécifier des paramètres équivalents au nombre de spécificateurs de la chaîne de caractères, un plantage du programme risque de se produire (violation d'accès mémoire) ou des données erronées seront affichées, tandis que s'il y a trop de paramètres de spécifiés, les paramètres supplémentaires seront ignorés.
- Compatibilité : Il existe beaucoup plus de spécificateur de formatage en fonction des versions de langages de programmation C, toutefois, les spécificateurs «%c», «%d», «%f», «%i», «%o», «%s» et «%x» sont supportés par tous les langages de programmation C, tandis que les spécificateurs %e, %E, %g, %G, %l, %u et n% ne sont pas reconnus pour tous les langages de programmation C. Si le spécificateur n'existe pas dans la liste des spécificateurs reconnus par le compilateur de langage de programmation C, le spécificateur est soit ignoré lors de l'exécution ou il fait planter le programme, mais il n'est pas interrompu au moment de la compilation du programme. Aussi, certains compilateurs supportent une indentations en avant de la chaîne de caractères en spécifiant un nombre entre le caractère «%» et la lettre «s». En générale, les compilateurs de langage de programmation C, se réfère à des standards comme C89, C99, C++98, C++11,... pour indiquer les compatibilités aux spécificateurs et ainsi connaître la liste des spécificateurs qu'ils supportent.
- Les caractères spéciaux : Les caractères spéciaux (précédé du caractère «\») comme «\n» (pour une nouvelle ligne), «\r» (retour de chariot), «\l» (saut de ligne) «\t» (pour tabulation) sont reconnus et interprété par la fonction printf.
- Le méthode standard du langage de programmation C pour afficher des caractères, des chaînes de caractères, des valeur réels, des entiers des nombres octales et des valeurs hexadécimal vers la sortie standard est la fonction printf.
- Expression trop complexe : Il peut être judicieux d'utiliser plusieurs fois la fonction sprintf pour préparer par morceaux de pièces trop complexes pour une simple fonction «printf».
- Le langage C est sensible au case majuscule et minuscule. Par exemple printf() est différent de PrintF(). Ainsi, tous les caractères de la fonction printf doivent être en minuscule. De plus, les paramètres de la fonction doivent tous être situé entre les parenthèses principales. Enfin, la fonction doit se terminer par un point-virgule (;).
- Autres langages : La fonction printf fut une source d'inspiration pour de nombreux autres langages de programmation concurrent au langage de programmation C. Ainsi, il existe en Perl, la fonction printf et POSIX::printf, en PHP, la fonction printf, en Java la méthode System.out.printf et en Python, la fonction print.
- Si vous ne voulez pas afficher des nombres en utilisant la fonction printf, par souci de performance par exemple, vous devrez utiliser la combinaison de fonction atoi, atof, atol avec une fonction puts par exemple. Aussi, si vous souhaitez conserver le contenu d'un printf dans une variable de chaîne de caractères plutôt que de l'afficher l'écran, vous devrez utiliser sprintf.
- Le premier paramètre doit obligatoirement est une chaîne de caractères, si vous indiquez un nombre par exemple, vous aurez l'erreur d'exécution suivante :
- Si le spécificateur est du mauvais type de données, comme par exemple, un spécificateur %s avec un type de données int, vous aurez encore un message d'erreur :
- Si vous voulez sortir des données dans un fichier, vous devriez plutôt envisager d'utiliser la fonction fprintf.
- Si vous affichez des codes ASCII 0 (soit un «\0» dans votre chaîne de caractères), vous risquez de pas voir afficher le reste du message texte.
Segmentation fault |
Segmentation fault |
Exemples
Voici divers exemple d'affichages de format :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- printf("Boujour!\n");
- printf("Entier %%i = %i\n",15);
- printf("Hexadecimal %%x = %x\n",16);
- printf("Octal %%o = %o\n",16);
- printf("Chaine de caracteres %%s = %s\n","message");
- printf("Reel %%f = %f\n",123.45);
- printf("Reel %%f = %.2f\n",123.45);
- return 0;
- }
on obtiendra le résultat suivant :
Boujour!Entier %i = 15
Hexadecimal %x = 10
Octal %o = 20
Chaine de caracteres %s = message
Reel %f = 123.450000
Reel %f = 123.45
L'exemple suivant permet de montrer une résolution d'une expression de type de données long comme paramètre :
on obtiendra le résultat suivant :
Valeur d'une dizaine = 10Valeur d'un millier = 1000
Le produit de dizaine fois des millier = 10000
L'exemple suivant permet de montrer les valeurs ASCII de chacun des lettres du nom Gladir :
on obtiendra le résultat suivant :
Les codes ASCII de lettres G=71, l=108, a=97, d=100, i=105, r=114L'exemple suivant permet de cadré «Gladir.com» avec 20 espace à partir de la fin de la chaîne de caractères :
on obtiendra le résultat suivant :
Gladir.comVoir également
Langage de programmation - C - Référence procédures et fonctions - fprintf
Langage de programmation - C - Référence procédures et fonctions - fread
Langage de programmation - C - Référence procédures et fonctions - fscanf
Langage de programmation - C - Référence procédures et fonctions - fwrite
Langage de programmation - C - Référence procédures et fonctions - scanf
Langage de programmation - C pour Linux - Référence procédures et fonctions - printf
Langage de programmation - C++ - Référence procédures et fonctions - printf
Langage de programmation - Turbo C - Référence procédures et fonctions - printf
Langage de programmation - Quick C - Référence procédures et fonctions - printf
Langage de programmation - Symantec C++ - Référence procédures et fonctions - printf
Langage de programmation - Visual C++ - Référence procédures et fonctions - printf
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 195.