Tutorial
de Lenguaje
C
Dr. Roberto Gómez
prog02.c Ejemplo captura de
datos
/* Programa de ejemplo de
captura de un entero corto, un entero y un flotante */
#include
<stdio.h>
int main( )
{
short
s;
int
l;
float
f;
printf("Introduzca un entero corto,
un entero y un flotante separados por un espacio: \n")
scanf("%hd
%d %f",&s,&l,&f);
}
/* Después de haber
introducido
-123 999 y 99.0044 <RET> las variables s,l, y f tienen los
valores -123
999 y 99.0044 */
Ejercicios captura de datos
- Del programa anterior borre todos los
caracteres "&" de la función scanf( ) y vea que sucede.
- El programa anterior no despliega lo
captura, modifique el programa de tal forma que despliegue lo capturado.
- Cambie la línea scanf("%hd
%d %f",&s,&l,&f); por scanf("%hd,%d,%f",&s,&l,&f); y vea
lo que sucede
Nota
sobre el uso de scanf( ) para leer un caracter (%d)
El leer un caracter
con la función scanf( ) en sistemas Unix/Linux no es simple.
Cuando uno usa esta función para leer un carácter
generalmente el comando se comporta de forma extraña. En la
mayor parte de los casos el programa hace caso omiso de la captura y
"se la salta".
Consideremos el siguiente ejemplo
#include <stdio.h>
int main( )
{
float x;
char r;
int n;
printf("De el valor de n: ");
scanf("%d", &n);
printf("De un caracter: ");
scanf("%c", &r);
printf("De un numero real x: ");
scanf("%f", &x);
printf("El valor de n es %d y el de x es: %f \n",n,x);
printf("El caracter proporcionado es: %c \n",r )
}
La salida de la ejecución es la siguiente
$ gcc t2.c -o t2
$ ./t2
De el valor de n: 89
De un caracter: De un numero real x: 9.2
El valor de n es 89 y el de x es: 9.200000
El caracter proporcionado es:
$
En el ejemplo anterior el program "se
salto" la captura del caracter.
Uno de los problemas que se tiene es que scanf( ) lee el caracter de
retorno de la captura anterior y no toma en cuenta lo que se le indica.
Una buena referencia a este tipo de problema se encuentra aqui.
Es posible utilizar funciones como getc( ) o getchar( ) ( ver aquí ) ,
sin embargo tambien es posible utilizar scanf( ). Para esto debemos
indicarle a scanf( ) que "se coma" el caracter de retorno anterior. La
forma de hacerlo es usando la constante %*c antes de la captura del
caracter: scanf("%*c %c",&variable_char).
El usar lo anterior en el programa anterior (ver línea
azul), nos arroja el siguiente código:
#include <stdio.h>
int main( )
{
float x;
char r;
int n;
printf("De el valor de n: ");
scanf("%d", &n);
printf("De un caracter: ");
scanf("%*c %c",
&r);
printf("De un numero real x: ");
scanf("%f", &x);
printf("El valor de n es %d y el de x es: %f \n",n,x);
printf("El caracter proporcionado es: %c \n",r );
}
La salida de la ejecución es:
$ gcc t2.c -o t2
$ ./t2
De el valor de
n: 89
De un
caracter: r
De un numero
real x: 9.2
El valor de n
es 89 y el de x es: 9.200000
El caracter
proporcionado es: r
$
Cabe la pena aclarar que si la función scanf( ) es utilizada
para leer un caracter, y es la única utilizada, no es necesario
hacer lo anterior. Esto traera problemas ya que habria que capturar un
retorno (enter) antas de capturar el caracter. En estos casos se
recomienda usar solo la funcion scanf( ).
La solución a lo anterior se obtuvo de aquí.
MENÚ
PRINCIPAL