¿Qué significa scanf?
En el lenguaje de programación C, scanf es una función que lee datos formateados de stdin (es decir, el flujo de entrada estándar, que suele ser el teclado, a menos que se redirija) y luego escribe los resultados en los argumentos dados.
Esta función pertenece a una familia de funciones que tienen la misma funcionalidad pero sólo se diferencian en su fuente de datos. Por ejemplo, fscanf obtiene su entrada de un flujo de archivos, mientras que sscanf la obtiene de una cadena.
Definición de scanf
La función scanf tiene el siguiente prototipo/firma:
int scanf( const char *formato, ... );
donde:
- int (entero) es el tipo de retorno
- format es una cadena que contiene el/los especificador/es de tipo (ver más abajo)
- «…» (elipsis) indica que la función acepta un número variable de argumentos; cada argumento debe ser una dirección de memoria en la que se escribe el resultado convertido.
Un especificador de tipo simple consiste en un símbolo de porcentaje (%) y un carácter alfa que indica el tipo. A continuación se muestran algunos ejemplos de los especificadores de tipo reconocidos por scanf:
- %c – Carácter
- %d – Número entero con signo
- %x – Entero sin signo en formato hexadecimal
- %f – Punto flotante
- %s – Cadena
La función trabaja leyendo la entrada del flujo de entrada estándar y, a continuación, busca en el contenido de «formato» cualquier especificador de formato, intentando que ambos coincidan. Si tiene éxito, la función escribe el resultado en el argumento o argumentos pasados.
Por ejemplo, si la llamada a la función es:
scanf(«%c%d», &var1, &var2 );
y el usuario escribe «a1», la función escribirá «a» en «var1» y «1» en «var2». Sin embargo, si la llamada a la función es:
scanf(«%x», &var );
la misma entrada se leerá como el número hexadecimal «a1», que es 161 en decimal.
La función devuelve el siguiente valor:
- >0 – El número de elementos convertidos y asignados correctamente.
- 0 – No se ha asignado ningún elemento.
- <0 – Se ha producido un error de lectura o se ha alcanzado el final del archivo (EOF) antes de realizar ninguna asignación.