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).

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"
A quoi correspond le chiffre juste après le caractère espace ?
=> 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);
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);
Pour moi, les règles sont les suivantes (dites moi si je me trompe) :
- 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