web-dev-qa-db-fra.com

Définir une largeur de colonne de texte variable dans printf

Afin de déterminer la taille de la colonne en langage C, nous utilisons %<number>d. Par exemple, je peux taper %3d et cela me donnera une colonne de largeur = 3. Mon problème est que mon numéro après le % est une variable que je reçois, j'ai donc besoin de quelque chose comme %xd (où x est la variable entière que j'ai reçue quelque temps auparavant dans mon programme). Mais ça ne marche pas.

Y a-t-un autre moyen de faire ça?

52
Alaa M.

Vous pouvez le faire comme suit:

printf("%*d", width, value);

Du commentaire de Lee:
Vous pouvez également utiliser un * pour la taille de précision:

printf("%*.*f", width, precision, value);
89
Oliver Charlesworth

Juste pour être complet, je voulais mentionner qu'avec les versions conformes à POSIX de printf() vous pouvez également mettre la valeur réelle de la largeur (ou précision) du champ ailleurs dans la liste des paramètres et faire référence à en utilisant le numéro de paramètre basé sur 1 suivi d'un signe dollar:

Une largeur ou une précision de champ, ou les deux, peuvent être indiquées par un astérisque "∗" ou un astérisque suivi d'un ou plusieurs chiffres décimaux et d'un "$" au lieu d'une chaîne de chiffres. Dans ce cas, un argument int fournit la largeur ou la précision du champ. Une largeur de champ négative est traitée comme un indicateur de réglage gauche suivi d'une largeur de champ positive; une précision négative est traitée comme si elle manquait. Si une directive de format unique mélange des arguments positionnels (nn $) et non positionnels, les résultats ne sont pas définis.

Par exemple, printf ( "%1$*d", width, value );

7
jetset