Pregunta

He buscado un poco pero no he conseguido una particular respuesta clara.En C (y supongo que en C++), ¿cómo determinar lo que viene después de la % cuando se utiliza printf?.Por ejemplo:

double radius = 1.0;
double area = 0.0;
area = calculateArea( radius );
printf( "%10.1f     %10.2\n", radius, area );

Tomé este ejemplo directamente de un libro que tengo sobre el lenguaje C.Esto no tiene sentido para mí en absoluto.Cuando usted viene para arriba con 10.1f y 10.2f?Podría alguien por favor explicarme esto?

¿Fue útil?

Solución

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders es de Wikipedia referencia para el formato de los marcadores de posición de printf. http://www.cplusplus.com/reference/clibrary/cstdio/printf.html también es útil

Básicamente, en una forma simple es %[ancho].[precisión][tipo].Ancho le permite asegurarse de que la variable que se va a imprimir es de al menos de una cierta longitud (útil para las tablas, etc).Precisión le permite especificar la precisión de un número impreso (por ejemplo.decimales, etc) y la informa C/C++ lo que la variable que has dado es (carácter, entero, doble, etc).

Espero que esto ayude

ACTUALIZACIÓN:

Para aclarar el uso de sus ejemplos:

printf( "%10.1f     %10.2\n", radius, area );

%10.1 f (refiriéndose al primer argumento:radius) significa hacer una longitud de 10 caracteres (es decir.almohadilla con espacios), y la impresión es como un flotador con un decimal.

%10.2 (se refiere al segundo argumento:área) significa hacer de 10 caracteres de largo (como arriba) y de impresión con dos decimales.

Otros consejos

man 3 printf

en un sistema Linux le dará toda la información que necesita.Usted también puede encontrar estas páginas de manual en línea, por ejemplo en http://linux.die.net/man/3/printf

10.1 f significa que punto flotante con 1 lugar después de la coma decimal y el 10 lugares antes de que el punto decimal.Si el número tiene menos de 10 dígitos, se rellena con espacios.10.2 f es el mismo, pero con 2 lugares después de la coma decimal.

En todos los sistemas que he visto, desde Unix a los Rieles de las Migraciones, este no es el caso.@robintw expresa mejor:

Básicamente, en una forma simple es %[ancho].[precisión][tipo].

Es decir, no "10 lugares antes de el punto decimal", pero "10 lugares, antes y después, y incluyendo el punto decimal".

10.1 f significa que punto flotante con 10 caracteres de ancho con 1 lugar después del punto decimal.Si el número tiene menos de 10 dígitos, se rellena con espacios.10.2 f es el mismo, pero con 2 lugares después de la coma decimal.

Usted tiene estos tipos básicos:

%d   - integer
%x   - hex integer
%s   - string
%c   - char (only one)
%f   - floating point (float)
%d   - signed int (decimal)
%i   - signed int (integer) (same as decimal).
%u   - unsigned int
%ld  - long (signed) int
%lu  - long unsigned int
%lld - long long (signed) int
%llu - long long unsigned int

Editar:hay varios otros mencionados en @Eli respuesta (man 3 printf).

En definitiva, los valores después de la % dicen printf cómo interpretar (o salida) de todas las variables que viene más adelante.En tu ejemplo, radius se interpreta como un flotador (esto de la 'f'), y el 10.1 da información acerca del número de decimales a utilizar al imprimir.

Ver en este enlace para obtener más detalles acerca de todos los modificadores se puede utilizar con printf.

10.1 f significa que usted desee mostrar un flos con 1 decimal y el número que aparece debe ser 10 caracteres de largo.

El hombre de las páginas contienen la información que desea.Para leer lo que han de arriba:

printf( "%10.2f", 1.5 )

Esto imprimirá:

         1.50

Considerando:

printf("%.2f", 1.5 )

Impresiones:

1.50

Nota la justificación de ambos.De forma similar:

printf("%10.1f", 1.5 )

Sería de impresión:

        1.5

Cualquier número después .es la precisión que se desea imprimir.Cualquier número antes de la .es la distancia desde el margen izquierdo.

Una cuestión que no ha sido planteada por otros es si doble es el mismo que el de un flotador.En algunos sistemas diferentes especificador de formato que se necesitaba para un doble en comparación con un flotador.No menos importante debido a que los parámetros que se pasan podía ser de diferentes tamaños.

 %f - float
 %lf - double
 %g - double

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top