scanf

La familia de funciones scanf trabaja casi igual que el grupo printf, salvo porque dichas funciones leen los elementos de un flujo y sitúan valores en las variables en las direcciones que están transmitiendo. como parámetros de indicación. Usan una cadena de formato para controlar la conversión de entrada del mismo modo, y muchos de los especificadores de conversión son los mismos.

scanf_fichaLa cadena de formato de scanf y sus relacionadas contienen tanto caracteres ordinarios como especificadores de conversión, al igual que printf. Sin embargo, los caracteres ordinarios se usan para especificar caracteres que deben estar presentes en la entrada.

Un sencillo ejemplo sería:

ejemplo_scanf_tuxEsta llamada a scanf sería exitosa únicamente si los 4 caracteres siguientes de la entrada estándar son Hola. Después, si los siguientes caracteres forman un número decimal re3conocible, el número será leido y el valor será asignado a la variable num. Un espacio en la cadena de formato se usa para ignorar todos los espacios en blanco (espacios, tabuladores, saltos de página y líneas nuevas) en la entrada entre los especificadores de conversión.

Otros especificadores de conversión son:

  • %d.- Escanea un entero decimal.
  • %o, %x.- Escanea un octal, un entero hexadecimal.
  • %f, %e, %g.- escanea un número con coma flotante.
  • %c.- Escanea un carácter (espacio en blanco sin saltar).
  • %s.- Escanea una cadena.
  • %[].- Escanea un conjunto de caracteres.
  • %%.- Escanea un carácter %.

Al igual que printf, los especificadores de conversión scanf podrían tener también un ancho de campo para limitar la cantidad de entradas consumidas. Un especificador de tamaño (h para breve y l para lo largo) indica si el argumento de recepción es menor o mayor que el predeterminado. Esto significa que %hd indica un short int, %ld un ling int y %lg un número de coma flotante de doble precisión.

Un especificador que empieza con un asterisco indica que el elemento va a ser ignorado. Lo cual significa que la información no se va a almacenar y que, por lo tanto, no necesita una variable que la reciba.

Use el especificador %c para leer un único carácter de entrada. Esto no salta los caracteres de espacios en blanco iniciales.

Use el especificador %s para escanear entradas, pero tenga cuidado. Se salta los espacios en blanco que están al principio, pero se detiene cuando encuentra el primer carácter de espacio en blanco en la cadena, así que lo mejor es usarlo para leer palabras, en vez de cadenas en general. Además, sin un especificador de ancho de campo, no hay límite en la longitud de una cadena que pueda leer, de manera que la cadena de recepción debe ser suficiente para contener la cadena  más larga del flujo de entrada. Es mejor usar un especificador de campo, o una combinación de fgets y sscanf, para leer en una línea de entrada y después escanearla. Así evitará posibles sobrecargas de la memoria de las que pudiese sacar provecho un usuario malintencionado.

Use el especificador %[] para leer una cadena compuesta por caracteres de un conjunto. El formato %[A-Z] leerá una cadena de letras mayúsculas. Si el primer carácter del conjunto es un signo de intercalación, ^, el especificador lee una cadena que está compuesta de caracteres que no se encuentran en el conjunto. De manera que, para leer una cadena que contenga espacios, y pararse en la primera coma, puede usar %[^,].

atras

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.