Anuncios

Bienvenidos sean a este post, hoy veremos el metodo de ingreso de datos.

Anuncios

Para ingresar datos a nuestros codigos mediante la terminal disponemos de dos funciones que nos permiten esto:

  • scanf
  • fscanf
Anuncios

Al igual que sucedia con printf y fprintf estas dos funciones trabajan de forma similar pero una ingresara los datos mediante el stream predeterminado (scanf) y el otro nos permite definir cual sera nuestro stream de entrada (fscanf), pasemos a ver como es la sintaxis de ambos:

scanf(formateador, ubicacion_memoria);
Anuncios
fscanf(stream, formateador, ubicacion_memoria);
Anuncios

El formateador es muy similar al visto en printf porque sera el encargado de informar cual es el tipo de dato que vamos a recibir para trabajar, la ubicacion de memoria es en realidad la direccion de memoria de una variable, a continuacion les doy un ejemplo de cada uno:

scanf("%d", &unEntero);
Anuncios
fscanf(stdin, "%d", &unEntero);
Anuncios

Como pueden ver debemos usar el operador de referencia en una variable para no pasar la variable directamente sino la direccion de memoria de ella, para entender el concepto vamos a crear un ejemplo simple al cual llamaremos ingreso.c y le agregaremos el siguiente codigo:

ingreso.c

#include <stdio.h>

int main()
{
	int unEntero;
	double un_doble;

	printf("Ingresa un valor entero: ");
	scanf("%d", &unEntero);
	printf("Ingresa un valor con coma: ");
	scanf("%lf", &un_doble);
	printf("Los valores ingresados fueron:\n");
	printf("%d\n%lf\n", unEntero, un_doble);

	return 0;
}
Anuncios

Primero declararemos dos variables, una de tipo int y otro de tipo double para almacenar un valor de tipo entero y otro con coma respectivamente, despues primero mostraremos un mensaje para indicar cual tipo de valor debemos ingresar y luego usamos la funcion para ingresar el valor, observen como variamos el formateador para cada una de las variables, despues unicamente mostraremos ambos valores ingresados, compilemos y veamos como trabaja mediante el siguiente video

Anuncios

Otra forma de como poder usar a esta funcion es en una sola llamada, para ello tomaremos estas lineas del codigo anterior:

	printf("Ingresa un valor entero: ");
	scanf("%d", &unEntero);
	printf("Ingresa un valor con coma: ");
	scanf("%lf", &un_doble);
Anuncios

Y lo modificaremos por las siguientes:

	printf("Ingresa un valor entero y otro con coma: ");

	scanf("%d%lf", &unEntero, &un_doble);

Anuncios

Aqui pedimos que ingrese dos valores, uno de tipo entero y otro con coma pero la curiosidad es como pasamos el formateador, observen que pasamos los dos juntos y uno para cada tipo de dato, luego cada variable correspondiente, el resto del codigo sigue siendo el mismo, si lo compilamos nuevamente y veamos como trabaja ahora mediante el siguiente video

Anuncios

En este caso pasamos primero dos valores separados por un espacio, el programa entiende que son los valores para cada una de las variables que usamos en la funcion, despues pasamos un valor le dimos Enter y el programa se quedo esperando a un segundo valor para la segunda variable, esto sera siempre asi porque mientras no completemos el envio de los valores a las variables, pero que sucede cuando debemos manejar texto y no numeros? bueno para eso debemos modificar el codigo existente con el siguiente:

ingreso.c

#include <stdio.h>

int main()
{
	char un_char;
	char cadena[80];

	printf("Deseas continuar (S/N)?: ");
	scanf("%c", &un_char);

	if (un_char == 's' || un_char =='S')
	{
		printf("Ingresa un texto: ");
		scanf("%s", cadena);
		printf("Texto ingresado: %s\n", cadena);
	} else {
		printf("Nos vemos a la proxima!\n");
	}

	return 0;
}
Anuncios
Anuncios

Aqui a diferencia del codigo anterior declaramos dos variables de tipo char pero la primera sera para un solo caracter, el segunndo en cambio lo usaremos para almacenar una cadena de texto, nuestro primer paso sera solicitar una pregunta si deseamos continuar o no, para ello usaremos a la variable de un solo caracter y almacenaremos la respuesta, despues por medio de un condicional verificamos si se ingreso la letra s, en mayusculas o minusculas, y en caso de ser verdadero mostraremos un texto para que ingresemos un texto, y aqui usaremos un scanf pero con la otra variable, una vez ingresado el texto procedemos a mostrarlo, despues tenemos el else donde en caso de no querer continuar mostramos un mensaje de despedida, con todo esto comentado veamos como funciona mediante el siguiente video

Anuncios

Como pueden ver es muy simple trabajar con los caracteres o cadenas, simplemente estableciendo un tamaño de los caracteres a almacenar, al igual que en el caso numerico el texto a almacenar esta establecido por el Enter o el primer espacio que encuentre, otra opcion que tenemos es poder limitar o filtrar elementos de ingreso, para ello en el formateador usaremos a los corchetes, veamos su sintaxis:

%[ elementos ]
Anuncios

Pero tambien podemos establecer que los elementos que pasemos no sean validos, para ello lo haremos de esta forma:

%[ ^elementos ]

Anuncios

Este simbolo hara que todos los elementos que pasemos detras seran invalidos para el ingreso, para entenderlo mejor vamos a hacer una pequeña modificacion en el codigo anterior:

ingreso.c

#include <stdio.h>

int main()
{
	char un_char;
	char cadena[80];

	printf("Deseas continuar (S/N)?: ");
	scanf("%[s]", &un_char);

	if (un_char == 's' || un_char =='S')
	{
		printf("Ingresa un texto: ");
		scanf("%s", cadena);
		printf("Texto ingresado: %s\n", cadena);
	} else if (un_char == 'n' || un_char == 'N') {
		printf("Nos vemos a la proxima!\n");
	} else {
		printf("Pufff\n");
	}

	return 0;
}
Anuncios

Aqui aplicamos el limite para el ingreso y en este caso solo aceptaremos la letra s, despues modificamos el condicional donde ahora tambien chequearemos si la letra es n y despues un else para cuando no sea ninguno de esos dos, el resto sigue igual, vamos a ver como trabaja ahora mediante el siguiente video

Anuncios

Observen como al no tener la letra n como valida nos pasa directamente al else en lugar de evaluar el condicional, a continuacion veamos el siguiente video donde modificaremos el codigo nuevamente:

Anuncios

Ahora si nuestro codigo volvio a funcionar correctamente porque al pasar la letra n si nos devolvio el mensaje del condicional, para entenderlo mejor les recomiendo jugar un poco mas con este codigo, por ultimo podemos establecer un «ancho» para nuestros valores ingresados, pasemos a tomar el codigo anterior y vamos a modificarlo de la siguiente manera:

ingreso.c

#include <stdio.h>

int main()
{
	int dia;
	int mes;
	int anyo;

	printf("Ingresa una fecha (solo numeros): ");
	scanf("%2d%2d%4d", &dia, &mes, &anyo);

	printf("La fecha ingresada es: \n %d/%d/%d\n", dia, mes, anyo);

	return 0;
}
Anuncios

Aqui definimos tres variables que seran para almacenar el dia, mes y año como su nombre lo indica, luego pediremos que ingresen una fecha con solo numeros, y observemos como es nuestro scanf:

scanf("%2d%2d%4d", &dia, &mes, &anyo);
Anuncios

Pasamos tres formateadores seguidos pero antes del tipo le pasamos el ancho que tendra cada tipo, despues pasamos cada una de las variables que recibiran esos valores, despues simplemente lo mostramos como si fuera una fecha, compilemos y veamos como es su salida mediante el siguiente video

Anuncios

Como pueden ver siempre completara la variable con el ancho que le pasemos, con esto hemos completado la mayor cantidad de opciones de como trabaja scanf, desde lo mas basico hasta algunas opciones que nos permite delimitar nuestros valores ingresados a las variables.

Anuncios

En resumen, hoy hemos visto scanf, que es, para que se utiliza, como podemos trabajar con ellos, su forma mas basica, ya sea para numeros o cadenas de textos, asi como algunos filtros que podemos establecer como tambien poder limitar su ancho, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50