2011-08-18 26 views
41

Para determinar el tamaño de la columna en lenguaje C usamos %<number>d. Por ejemplo, puedo escribir %3d y me dará una columna de ancho = 3. Mi problema es que mi número después del % es una variable que recibo, entonces necesito algo como %xd (donde x es la variable entera que recibí en algún momento de mi programa). Pero no está funcionando.Establecer el ancho de columna de texto variable en printf

¿Hay alguna otra manera de hacerlo?

+3

En general, en lugar de "no trabajar" debería copiar y pegar el mensaje de error exacto que ha recibido. –

Respuesta

64

Esto se puede hacer de la siguiente manera:

Desde el comentario de Lee:
También se puede utilizar un * para el tamaño de precisión:

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

También puede usar un * para el tamaño de precisión: 'printf ('% *. * F', ancho, precisión, valor);' –

+0

Genial, ¡no conocía esa construcción! –

+0

Eso debería ser '"% * d "' –

5

simplemente para la corrección, quería mencionar que con versiones compatibles con POSIX de printf() también puede poner el valor real de ancho de campo (o precisión) en otro lugar en la lista de parámetros y hacer referencia a él usando el número de parámetro basado en 1 seguido de un signo de dólar:

Un ancho de campo o precisión, o ambos, se pueden indicar con un asterisco '*' o un asterisco seguido de uno o más dígitos decimales y un '$' en lugar de una cadena de dígitos. En este caso, un argumento int proporciona el ancho o la precisión del campo. Un ancho de campo negativo se trata como un indicador de ajuste izquierdo seguido de un ancho de campo positivo; una precisión negativa se trata como si faltara. Si una directiva de formato único mezcla argumentos posicionales (nn $) y no posicionales, los resultados no están definidos.

por ejemplo, printf ("%1$*d", width, value);

+1

Su ejemplo no se ajusta al idioma. Debería ser '"% * 1 $ d "' –

+0

Además, debe especificar ambos argumentos por 'n $', de la siguiente manera: 'printf ("% 2 $ * 1 $ d ", width, value);' . –

Cuestiones relacionadas