Inicio | Artículos | Biografías | Cursos | Entrevistas | Frases | Libros | Diccionario | Presentaciones | Servicios | Videos | Mapa Web | Enlazar | Contactar | Acerca de


CURSO/TUTORIAL DE LENGUAJE C
Introducción
Introducción
Fases de la Puesta a Punto de un Programa en C
Estructura de un Programa
Tipos de Instrucciones
Mi primer Programa
Elementos Básicos
Tipos de Datos
Identificadores
Variables
Constantes
Operadores y Expresiones
Funciones printf y scanf
Comentarios
La Función fflush
Tipos de Errores
Instrucciones de Control
Instrucciones Alternativas
Instrucciones Repetitivas
Instrucciones De Salto
CarlosPes.comCurso de Lenguaje C > Especificadores de Formato en la Función scanf del Lenguaje C

Especificadores de Formato en la Función scanf del Lenguaje C

¿Cómo utilizar un especificador de formato en la función scanf de C?

En la fución scanf, por cada argumento (variable) que se le pase, se debe escribir un especificador de formato, que establecerá el formato de entrada por teclado del argumento. La forma más sencilla de escribir un especificador de formato en la función scanf es con el carácter tanto por ciento (%) seguido de un carácter de conversión que indique el tipo de dato del argumento. De momento, no es necesario conocer todos los especificadores de formato que se pueden usar en la función scanf, pero sí, los más usados, que son los mismos que en la función printf:
Especificadores de formato en la funcion scanf
Figura - Especificadores de formato más utilizados en la función scanf.
Ejemplo 1: Dado el programa:
#include <stdio.h>

int main()
{
   int numero;

   printf( "\n   Introduzca un numero entero: " );
   scanf( "%d", &numero );

   return 0;
}
En la memoria se reservará espacio para la variable numero. Y si el usuario teclea, por ejemplo, un 5, en pantalla se verá:

   Introduzca un numero entero: 5
Puesto que la variable numero es de tipo entero, en la cadena de control se tiene que escribir el especificador de formato asociado a la entrada de un número entero (%d). Por otro lado, la variable numero se ha escrito precedida del carácter ampersand (&). Se trata de un nuevo operador, el operador dirección. El operador dirección (&) siempre actúa sobre un operando (normalmente una variable) y, de su evaluación, se obtiene la dirección de memoria de dicha variable.

Es sabido que, una variable representa a un espacio de memoria en el cual se puede almacenar un dato. Pues bien, en realidad, a la función
scanf no se le pasa una lista de variables, sino, las direcciones de memoria de los espacios de memoria a los que representan dichas variables.

Para todas las variables declaradas en un programa se reservan espacios de memoria en donde se almacenarán datos. La memoria del
computador está dividida en celdas numeradas de forma consecutiva, por lo que, cada una de ellas tiene una dirección (un número). Un dato puede necesitar una o más celdas de memoria. Así pues, en el ejemplo 1, la expresión &numero hace referencia a la primera celda donde se va a almacenar el valor 5 introducido por el usuario. La dirección de memoria de la variable numero podría ser, por ejemplo, 0012FF88. En informática, las direcciones de memoria suelen representarse con números hexadecimales. Gráficamente, se puede representar de la siguiente manera:
Dirección de memoria de la variable número
El operador dirección (&) entra dentro de la categoría de operadores monarios y, siguiendo con el ejemplo, de la evaluación de la expresión

&numero

se obtiene el valor 0012FF88, que es la dirección de memoria de la variable
numero. Esa dirección la necesita conocer la función scanf para localizar la primera celda del espacio de memoria en donde se va a almacenar el 5 introducido por el usuario.

La dirección de memoria de la variable
numero se puede visualizar en pantalla escribiendo

printf ( "%p", &numero );

Puesto que, de la expresión
&numero se obtiene una dirección de memoria, en la cadena de control de la función printf se tiene que escribir el especificador de formato asociado a la salida de una dirección de memoria, (%p).

Obsérvese que, en la cadena de control de
printf, se ha eludido escribir con tilde la palabra numero, ya que, de haberlo hecho, por pantalla hubiesemos visto algo parecido a:

   Introduzca un n·mero entero: 5
Para visualizar el carácter 'ú', podemos escribir:

printf( "\n Introduzca un n%cmero entero: ", 163 );

Fíjese que, 163 es el número decimal que corresponde al carácter 'ú' en
ASCII.

Ejemplo 2: Ahora, estudiemos el siguiente programa:
#include <math.h>
#include <stdio.h>

#define PI 3.141592

int main()
{
   float area, radio;

   printf( "\n   Introduzca radio: " );
   scanf( "%f", &radio );
   area = PI * pow( radio, 2 );
   printf( "\n   El area de la circunferencia es: %f", area );

   return 0;
}
Inicialmente, en la memoria se reservará espacio para las dos variables del programa.
Ejemplo direcciones de memoria de las variables área y radio
Si el usuario teclea, por ejemplo, el valor 3.8 para el radio, en pantalla se visualizará:

   Introduzca radio: 3.8

   El area de la circunferencia es: 45.364588
La variable radio es de tipo real y, por tanto, en la cadena de control de la función scanf se tiene que escribir el especificador de formato asociado a la entrada de un número real, (%f). Y, puesto que, en la función printf, el resultado de evaluar la expresión area también es de tipo real, en su cadena de control hay que escribir, de igual forma, el especificador de formato asociado a la salida de un número real, (%f).

Para que el área se muestre sólo con dos cifras decimales, es decir, 45.36 en vez de 45.364588, en la cadena de control de la función
printf se debe escribir %.2f en vez de %f.

printf( "\n   El area de la circunferencia es: %.2f", area );

En pantalla se verá

   Introduzca radio: 3.8

   El area de la circunferencia es: 45.36
Aunque sólo se muestren dos cifras decimales, en memoria el area seguirá valiendo 45.364588.

Por otra parte, hemos dicho que, para conocer la dirección de memoria de una variable, se puede utilizar el operador dirección (
&). Pero, esta regla no es general. Por ejemplo, no es aplicable a las variables (arrays) de tipo cadena.

Ejemplo 3: Si se desea desarrollar un programa para leer un nombre de persona:

   Introduzca nombre: Elsa
se puede escribir:
#include <stdio.h>

int main()
{
   char nombre[5];

   printf( "\n   Introduzca nombre: " );
   scanf( "%s", nombre );

   return 0;
}
Obsérvese que, a la función scanf se le "pasa" nombre en vez de &nombre. Esto es así, ya que, para las variables de tipo cadena (arrays de caracteres), su propio identificador (nombre, en este caso) ya hace referencia a la dirección de memoria donde se va a almacenar el dato. Más concretamente, hace referencia al espacio reservado en memoria para guardar el primer carácter de la cadena. Para el resto de caracteres de la cadena, el sistema habrá reservado, en memoria, espacios contiguos al primero.
Ejemplo dirección de memoria del array nombre
Nótese que, la variable nombre ha sido declarada con un tamaño de cinco caracteres. Por consiguiente, con este programa sólo se podrá almacenar en memoria un nombre de persona de hasta cuatro caracteres, ya que, en el quinto debe guardarse el carácter nulo (\0).
Artículos Interesantes
Artículos de Desarrollo Web
Artículos de Informática
Artículos de Programación
Artículos de SEO
Cursos/Tutoriales de Informática
Curso/Tutorial de Algoritmos
Curso/Tutorial de Informática Básica
Curso/Tutorial de Ingeniería del Software
Curso/Tutorial de Lenguaje C
Curso/Tutorial de Marketing en Internet
Curso/Tutorial de Turbo Pascal
Curso/Tutorial de Representación de los Datos
Curso/Tutorial para Webmasters
Curso/Tutorial Web 2.0
Curso de SEO
Libros de Carlos Pes
36 Pasos Básicos para Desarrollar un Sitio Web
Empezar de Cero a Programar en Lenguaje C
Fundamentos del SEO
Libros Recomendados
Libros de Analítica Web
Libros de Desarrollo Web
Libros de Java
Libros de Lenguaje C
Libros de Marketing Online
Libros de Pascal (Turbo Pascal)
Libros de SEO
Libros de Visual Basic
Recursos de Informática
Diccionario de Informática
Ejercicios de Programación
Guías de uso de Software
Sintaxis de Lenguajes de Programación
Biografías
Entrevistas
Frases y Citas
Recursos Educativos
Presentaciones Educativas
Videos Educativos
Enlaces Web
Servicios
Desarrollo de Sitios Web
Diseño Web
Aplicaciones Web
Marketing Online
Formación y Conferencias
Consultoría
Acerca de Carlos Pes
Bibliotecas
Colaboradores
Contactar
Enlazar
Librerías
Perfiles en Internet
Mapa Web
Blog de Carlos Pes Blog de Carlos Pes
Google+ CarlosPes.Com en Google+
© 2006-2017 CarlosPes.com