Bonjour,
J'ai fait quelques tests avec la fonction printf
Si j'ai bien compris, une specification de conversion est sous la forme "%[flags][width][precision][len]type" :
- Valeurs possibles de flags : '+', '#', 'espace', '-'.
- width : nombre décimal ne commençant pas par '0'.
- precision : nombre décimal précédé du caractère '.'. Si nombre à virgule, nombre decimal à afficher, sinon si %s, c'est la taille maximale de la chaine à afficher, sinon champ non pris en compte.
- Valeurs possibles de len : "l", "ll", "L", "h", "hh", "z".
- Valeurs possibles de type: '%', 'c', 's', 'i', 'd', 'u', 'x', 'X', 'p', 'f', 'F', 'e', 'E', 'g', 'G' (il en existe d'autres mais toutes ce sont pas supportées par la plupart des plateformes).
A quoi correspond le chiffre juste après le caractère espace ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 printf("\"% 6.2f\"\r\n", 1.234); // affiche " 1.23" printf("\"% 3.2f\"\r\n", 1.234); // affiche " 1.23" printf("\"% 4.6f\"\r\n", -0.5); // affiche " -0.500000"
=> en lisant la documentation, j'avais l'impression que ça correspondait à la taille minimal de la chaine générée mais ce n'est pas ce qui est affiché :
- sur la seconde ligne, il y a un espace en trop
- sur la troisième ligne, il y a un espace en trop
Aussi, pouvez-vous me confirmer que les cas suivants ont la même signification ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // Même signification ? printf("\"% 6.2f\"\r\n", 1.234); printf("\"%6.2f\"\r\n", 1.234);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // Même signification ? printf("\"% .2f\"\r\n", 1.234); printf("\"% 0.2f\"\r\n", 1.234); printf("\"% 01.2f\"\r\n", 1.234);Pour moi, les règles sont les suivantes (dites moi si je me trompe) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // Même signification ? printf("\"%-0 6.2f\"\r\n", 1.234); printf("\"% 0-6.2f\"\r\n", 1.234);
- Le flag '-' est prioritaire sur le flag '0' qui est prioritaire sur le flag 'espace'.
- Si pas de flag dans la séquence, le flag 'espace' est actif.
- Si le champ width n'est pas défini, alors il vaut 1.
- Le champ width ne peut pas être défini avec la valeur 0 car en conflit avec le flag '0'.
- Le champ width désigne la taille minimale de la chaine généré, alors que le champ precision correspond au nombre de chiffres après la virgule
Merci d'avance
Partager