Skip to content

MrDave1999/pscanf.h

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 

Repository files navigation

pscanf.h

pscanf.h

Las características de P-Scanf son:

  • Detecta si el dato ingresado por el usuario es el correcto, es decir, si el usuario escribe un caracter y lo que se pide realmente es un entero, dará un error.
  • Limpia el búfer del teclado de manera automáticamente, siempre y cuando se use las macros de P-Scanf.
  • Tiene un manejo de cadenas de forma segura, así que no se necesita especificar el tamaño del arreglo al momento de pedir información por teclado.
  • Libera la memoria automáticamente si llegara a ver un fallo en la asignación de memoria.

Instalación

  • Si usas cl.exe (de Visual Studio) como compilador de C/C++, debes agregar lo siguiente:

    • La biblioteca estática llamada libpscanf.lib la debes añadir en la carpeta lib y se lo encuentra en la siguiente ruta: C:\Program Files\Microsoft Visual Studio 12.0\VC\lib

      Para evitar esta posible advertencia del enlazador: warning LNK4099: PDB 'libpscanf.pdb' was not found with 'libpscanf.lib' or at 'libpscanf.pdb'; linking object as if no debug info

      Agrega el archivo libpscanf.pdb en la misma carpeta donde metas libpscanf.lib .

      Luego de añadir la biblioteca y el archivo .PDB, abrimos el Visual Studio y nos vamos a la sección de Proyecto -> Propiedades de configuración -> Vinculador -> Entrada -> Dependencias adicionales (en esta opción agregas el nombre de la biblioteca estática con su respectiva extensión .lib) .

    • El archivo de cabecera llamado pscanf.h la debes añadir en la carpeta include y se lo encuentra en la siguiente ruta: C:\Program Files\Microsoft Visual Studio 12.0\VC\include

Cuando hayas hecho los dos pasos anteriores, procedes a incluir el archivo pscanf.h en el archivo de origen (donde está el main):

#include <pscanf.h>
  • Si usas Dev-C++ como IDE(Entorno de desarrollo integrado) para compilar códigos de C/C++, debes agregar lo siguiente:

    • La biblioteca estática llamada libpscanf.a la debes añadir en la carpeta lib y se lo encuentra en la siguiente ruta: C:\Program Files\Dev-Cpp\lib

      Luego de añadir la biblioteca, abrimos el Dev-C++ y nos vamos a la sección de Proyecto -> Opciones del proyecto -> Parámetros -> Linker (en esta opción agregas el siguiente comando: -lpscanf) .

    • El archivo de cabecera llamado pscanf.h la debes añadir en la carpeta include y se lo encuentra en la siguiente ruta: C:\Program Files\Dev-Cpp\include

La biblioteca y el archivo de cabecera lo debes descargar aquí: PScanf

Macros

  • dataread(_format, _var, ...) = Permite leer un dato de cualquier tipo desde el búfer de entrada estándar.

  • strread(_var, ...) = Lee una cadena desde el búfer de entrada estándar. Esta macro hace que la función retorne 1 si llega a suceder un fallo en la asignación de memoria, esto se debe, porqué la cadena se reserva dinámicamente.

Funciones

  • pause() = Pausa el programa y envía un mensaje diciendo: "Presiona enter para continuar...".

  • sfree() = Libera todos los espacios de memoria reservados con la macro strread.

Uso

Lectura de un entero:

#include <stdio.h>
#include <pscanf.h>

int main(void)
{
	int a;
	dataread("%d", &a, "Ingrese un int: ");
	printf("%d\n", a);
	return 0;
}

Si el usuario llegara a escribir un caracter, dará un mensaje de error: "Error: Ingrese un valor entero: ".

Lectura de una cadena:

#include <stdio.h>
#include <pscanf.h>

int main(void)
{
	string name = { NULL }; 
	strread(&name, "Ingrese un string: ");
	printf("String: %s - Length: %d\n", name, name.length);
	sfree();
	pause();
	return 0;
}

Con el miembro "length" se obtiene la longitud de la cadena.

Recorrido de una cadena:

#include <stdio.h>
#include <pscanf.h>

int main(void)
{
	int i;
	string name = { NULL }; 
	strread(&name, "Ingrese un string: ");
	for (i = 0; i != name.length; ++i)
		printf("%c\n", name.s[i]);
	sfree();
	pause();
	return 0;
}

Con el miembro "s" se obtiene el caracter.

Almacenamiento de múltiples cadenas:

#include <stdio.h>
#include <stdint.h>
#include <pscanf.h>
#define MAX_STRINGS (5)

/* La función retorna 0 si se pudo asignar memoria con la macro strread, de lo contrario, devuelve 1. */
uint8_t DataEntry(string* name)
{
	int i;
	for (i = 0; i != MAX_STRINGS; ++i)
	{ /* Es necesario las llaves, la macro strread expande 2 líneas de código. */
		strread(&name[i], "Ingrese un string %d: ", i + 1);
	}
	return 0;
}

void PrintData(string* name)
{
	int i, j;
	for (i = 0; i != MAX_STRINGS; ++i)
		printf("%s\n", name[i]);
	printf("\n");
	for (i = 0; i != MAX_STRINGS; ++i)
	{
		for (j = 0; j != name[i].length; ++j)
			printf("%c", name[i].s[j]);
		printf("\n");
	}
}

int main(void)
{
	string name[MAX_STRINGS] = { NULL };
	if (DataEntry(name)) return 1;
	PrintData(name);
	sfree();
	pause();
	return 0;
}

Nota: Es obligatorio inicializar a NULL cada variable de tipo string.

Créditos

  • MrDave
    • Por el desarrollo de la herramienta P-Scanf
  • Microsoft Corporation
    • Se usó el compilador cl.exe para poder compilar los códigos de prueba, de ese modo se comprueba sí no hubo algún error.

About

Pide datos al usuario de forma segura con pscanf.h (pscanf = print-scanf).

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages