El especificador de formato se utiliza durante la entrada y la salida. Es una forma de decirle al compilador qué tipo de datos hay en una variable durante la entrada usando scanf() o imprimiendo usando printf(). Algunos ejemplos son %c, %d, %f, etc.
El especificador de formato en printf() y scanf() es prácticamente el mismo, pero hay algunas diferencias que veremos.
printf(char *formato, arg1, arg2, …)
Esta función imprime el carácter en la salida estándar y devuelve el número de caracteres impresos, el formato es una string que comienza con % y termina con el carácter de conversión (como c, i, f, d, etc.).
Entre ambos, pueden existir elementos que rijan el formato de impresión. A continuación se muestra su descripción.
- Un signo menos (-) indica la alineación a la izquierda.
- Un número después de % especifica el ancho de campo mínimo que se imprimirá si los caracteres son menores que el tamaño del ancho, el espacio restante se llena con espacio y si es mayor de lo que se imprimió sin truncamiento.
- Un símbolo de punto ( . ) separa el ancho del campo con la precisión.
La precisión indica el número mínimo de dígitos en un número entero, el número máximo de caracteres en una string y el número de dígitos después de la parte decimal en un valor flotante.
Veamos estos…
Especificador de formato de carácter: %c
C
#include <stdio.h> int main() { char ch = 'A'; printf("%c\n", ch); return 0; }
A
Para el especificador de formato de entero con signo: %d, %i
C
#include <stdio.h> int main() { int x = 45, y = 90; printf("%d\n", x); printf("%i\n", x); return 0; }
45 45
Especificador de formato de entero sin signo: %u:
C
#include <stdio.h> int main() { // The -10 value is converted into it's positive // equivalent by %u printf("%u\n", -10); printf("%u\n", 10); return 0; }
Output: 4294967286 10
Especificador de formato de coma flotante: %f, %e o %E
C
#include <stdio.h> int main() { float a = 12.67; printf("%f\n", a); printf("%e\n", a); return 0; }
12.670000 1.267000e+01
Número octal sin signo para entero: %o
C
#include <stdio.h> int main() { int a = 67; printf("%o\n", a); return 0; }
103
Hexadecimal sin signo para entero: %x, %X
C
#include <stdio.h> int main() { int a = 15; printf("%x\n", a); return 0; }
f
Impresión de strings: %s
C
#include <stdio.h> int main() { char a[] = "geeksforgeeks"; printf("%s\n", a); return 0; }
geeksforgeeks
Impresión de dirección: %p
Cuando nuestra intención es imprimir la dirección de memoria de una variable/puntero, ‘%d’ no funcionará porque ‘%d’ intentará formatear una dirección en un número y valores como 0xbfdd812 claramente no son un número, es decir, DEBEMOS usar % pags.
C
#include <stdio.h> int main() { int a = 10; printf("The Memory Address of a: %p\n",(void*)&a); return 0; }
Output: The Memory Address of a: 0x7ffc85861624
Más formato
C
#include <stdio.h> int main() { char str[] = "geeksforgeeks"; printf("%20s\n", str); printf("%-20s\n", str); printf("%20.5s\n", str); printf("%-20.5s\n", str); return 0; }
geeksforgeeks geeksforgeeks geeks geeks
scanf(char *formato, arg1, arg2, …)
Esta función toma la entrada usando la entrada estándar (teclado) y la almacena en la variable correspondiente. Devuelve el número de elementos leídos con éxito. El parámetro formal arg1, agr2, .. debe ser un puntero
entero decimal: %d
C
#include <stdio.h> int main() { int a = 0; scanf("%d", &a); // input is 45 printf("%d\n", a); return 0; }
El entero puede ser octal o hexadecimal: %i
C
#include <stdio.h> int main() { int a = 0; scanf("%i", &a); // input is 017 (octal of 15 ) printf("%d\n", a); scanf("%i", &a); // input is 0xf (hexadecimal of 15 ) printf("%d\n", a); return 0; }
Número de coma flotante doble: %lf
C
#include <stdio.h> int main() { double a = 0.0; scanf("%lf", &a); // input is 45.65 printf("%lf\n", a); return 0; }
45.650000
Entrada de string: %s
C
#include <stdio.h> int main() { char str[20]; scanf("%s", str); // input is geeksforgeeks printf("%s\n", str); return 0; }
P@
Entrada de caracteres: %c
C
#include <stdio.h> int main() { char ch; scanf("%c", &ch); // input is A printf("%c\n", ch); return 0; }
También hay muchos otros especificadores de formato
1.%u para un entero sin signo.
2.%lld para long long int.
3.%o entero octal sin cero inicial
4.%x entero hexadecimal sin 0x antes del número.