📂 Archivo técnico
Este contenido lo publiqué en un blog anterior durante mis primeros proyectos. Hoy lo conservo aquí como referencia y ejemplo práctico para quienes quieran reforzar la lógica de programación.
Contenido
ToggleLogin en C con clave en asteriscos y 3 intentos
En esta oportunidad traigo un login en C que simula el proceso de inicio de sesión a un sistema mediante la consola. El lenguaje de programación utilizado es C y el IDE Dev C++.
En este programa:
- La contraseña se muestra en asteriscos.
- Solo se permite 3 intentos.
Si deseas un programa similar al que presente en este artículo pero en el lenguaje C++, deberías entrar a esta entrada:
Login en C++ con usuario y contraseña en asteriscos con 3 intentos
También puedes revisar una versión más avanzada de este programa donde se pueden crear nuevos usuarios y guardarlos en archivos con el objetivo de que se mantengan incluso luego de cerrar el programa:
Login avanzado en C con registro de usuarios, menú de opciones y archivos binarios
Capturas de pantalla del programa
La contraseña aparece en asteriscos. Cuando la clave es incorrecta, el programa muestra el mensaje respectivo. Se pulsa la tecla ENTER para volver a ingresar el usuario y la contraseña.
El programa solo admite un máximo de 3 intentos fallidos al momento de ingresar la clave. Si se sobrepasa este límite, el programa muestra el mensaje de despedida: “Ha sobrepasado el número máximo de intentos permitidos”.
La contraseña aparece en asteriscos. Cuando la clave es incorrecta, el programa muestra el mensaje respectivo. Se pulsa la tecla ENTER para volver a ingresar el usuario y la contraseña.
Cuando se ingresa el usuario y la contraseña correcta, el programa muestra el mensaje de bienvenida adecuado.
Código fuente (lenguaje C)
#include
#include /* gets, strcmp */
#include /* system */
#define TECLA_ENTER 13
#define TECLA_BACKSPACE 8
#define LONGITUD 5
#define MAX_INTENTOS 3
#define NUMERO_USUARIOS 5
int main() {
char usuario[LONGITUD + 1];
char clave[LONGITUD + 1];
int intento = 0;
int ingresa = 0;
char caracter;
int i = 0;
int j = 0;
/* Declaración e inicialización de arreglos de usuarios y claves */
char usuarios[NUMERO_USUARIOS][LONGITUD + 1] = {"luis", "jorge", "james", "johan", "kevin"};
char claves[NUMERO_USUARIOS][LONGITUD + 1] = {"123", "456", "789", "abc", "efg"};
do {
i = 0;
system("cls");
printf("\n\t\t\tINICIO DE SESION\n");
printf("\t\t\t---------------\n");
printf("\n\tUSUARIO: ");
gets(usuario);
printf("\tCLAVE: ");
while (caracter = getch()) {
if (caracter == TECLA_ENTER) {
clave[i] = '\0';
break;
} else if (caracter == TECLA_BACKSPACE) {
if (i > 0) {
i--;
printf("\b \b");
}
} else {
if (i < LONGITUD) {
printf("*");
clave[i] = caracter;
i++;
}
}
}
/* El usuario y clave debe coincidir con alguno de los que se encuentran en el array */
for (j = 0; j < NUMERO_USUARIOS; ++j) {
if (strcmp(usuario, usuarios[j]) == 0 && strcmp(clave, claves[j]) == 0) {
ingresa = 1;
break;
}
}
if (ingresa == 0) {
printf("\n\tUsuario y/o clave son incorrectos\n");
intento++;
getchar();
}
} while (intento < MAX_INTENTOS && ingresa == 0);
if (ingresa == 1) {
printf("\n\n\tBienvenido al Sistema\n");
/* Aquí va el código del programa cuando el usuario ingresa sus credenciales correctas */
} else {
printf("\n\n\tHa sobrepasado el numero maximo de intentos permitidos\n");
}
return 0;
}
Videotutoriales
Una cadena en C es en realidad un arreglo de caracteres:
En otros lenguajes de programación, las cadenas existen como tipos de datos en sí. En C++, Java, C# entre otros, tenemos a la clase String. En C no sucede esto. Es por tal motivo que se utilizan arreglos de caracteres. Esto explica el por qué la declaración de una cadena en C tiene la misma sintaxis que la declaración de un arreglo cualquiera. Pero es necesario aclarar, que las cadenas en C tienen una peculiaridad que las diferencian de cualquier arreglo de char ordinario. Las cadenas en C contienen al final el caracter nulo. El caracter nulo es un caracter como cualquier otro cuyo código ASCII es cero y se representa de la siguiente manera: ‘\0′ (back slash y un cero encerrados entre comillas simples).
C cuenta con la biblioteca (mal llamada librería) string la cual contiene una serie de funciones que permiten manipular cadenas de caracteres como si se tratasen de un todo (y permiten abstraernos y evitar manipularlas como lo que realmente son: arreglos de caracteres). Para utilizar dichas funciones se requiere que en el código fuente se incluya mediante la directiva include el archivo de cabecera string.h
Para la lectura de cadenas se cuenta con la función gets.
Para comparar una cadena con otra se tiene a la función strcmp.
En el tutorial, al momento de leer el nombre de usuario se utilizará la función gets, pero para leer la clave se usará la función getch la cual permite leer caracter por caracter sin mostrar los caracteres escritos en pantalla. Gracias a este comportamiento particular de la función getch es que podremos realizar el efecto de mostrar los asteriscos en lugar de los caracteres leídos. Para poder hacer esto posible y evitar cualquier error vamos a manipular la cadena donde se guarda la clave como un arreglo de caracteres insertando manualmente el caracter nulo al final de la cadena clave.

