Definir largura de coluna de texto variável em printf

Para determinar o tamanho da coluna na linguagem C, usamos %d . Por exemplo, eu posso digitar %3d e isso me dará uma coluna de largura = 3. Meu problema é que meu número após o % é uma variável que eu recebo, então eu preciso de algo como %xd (onde x é a variável inteira que recebi em algum momento antes no meu programa). Mas não está funcionando.

Existe alguma outra maneira de fazer isso?

Você pode fazer isso da seguinte maneira:

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

Do comentário de Lee:
Você também pode usar um * para o tamanho de precisão:

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

Apenas para completar, queria mencionar que com versões do printf() compatíveis com POSIX printf() você também pode colocar o valor real da largura (ou precisão) em algum outro lugar na lista de parâmetros e consultá-lo usando o número do parâmetro baseado em 1 seguido por um cifrão:

Uma largura ou precisão de campo, ou ambas, podem ser indicadas por um asterisco ‘∗’ ou um asterisco seguido por um ou mais dígitos decimais e uma ‘$’ em vez de uma cadeia de dígitos. Nesse caso, um argumento int fornece a largura ou a precisão do campo. Uma largura de campo negativa é tratada como um sinalizador de ajuste à esquerda seguido por uma largura de campo positiva; uma precisão negativa é tratada como se estivesse faltando. Se uma diretiva de formato único misturar argumentos posicionais (nn $) e não posicionais, os resultados serão indefinidos.

Por exemplo, printf ( "%1$*d", width, value );