📂 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.
Este artículo muestro un ejemplo básico pero completo de cómo implementar un login en C++. Si buscas construir una funcionalidad de inicio de sesión para tus proyectos en C++, este artículo es para ti.
Contenido
ToggleLogin en C++
Un login en el proceso de acceder a un sistema mediante el uso de algún tipo de autenticación, siendo uno de los casos más comunes y simples, el uso de credenciales de acceso (nombre de usuario y contraseña).
En esta publicación te muestro el código en lenguaje C++ de un programa para hacer un inicio de sesión con múltiples usuarios. Al final también podrás encontrar todos los videos donde explico de inicio a fin el desarrollo de este programa.
Las funcionalidades de este programa son las siguientes:
- Se pide el ingreso de un nombre de usuario y una contraseña.
- Al escribir la contraseña, en la pantalla se verán asteriscos.
- Sólo se permitirá un máximo de 3 intentos. Si se ingresan credenciales incorrectas, el programa las volverá a pedir un total de 2 veces ya que en la tercera equivocación el programa se cerrará automáticamente.
- Se tienen permitidas varias cuentas de usuario.
Al día de hoy, son un total de 4 videos en donde te explico paso a paso la construcción de este programa. Fácilmente puedes reutilizarlo para tus proyectos de programación.
Capturas de pantalla del programa
Como podrás apreciar en la imagen, al ingresar la contraseña, ésta aparece en astericos como medida de seguridad. Cuando la clave es incorrecta, el programa muestra el mensaje “El usuario y/o password son incorrectos“. Se pulsa la tecla ENTER para volver a ingresar el usuario y la contraseña.
El programa solo admite un máximo de 2 equivocaciones. Si se sobrepasa este límite, el programa te mostrará el mensaje de despedida: “Usted no pudo ingresar al sistema. ADIOS” y luego se cerrará.
Cuando se ingresan las credenciales correctamente, el programa mostrará el mensaje de bienvenida: “Bienvenido al sistema“.
Antes de continuar:
- Si deseas este programa en lenguaje C, deberías entrar en este link:
- También, si necesitas un programa donde requieras registrar nuevos usuarios, podrías revisar esta otra entrada. Aquí programo en lenguaje C y utilizo archivos binarios para el almacenamiento de los datos de los usuarios.
programa-en-c-login-password-asteriscos-y-registro-usuarios-archivos-binarios/
Código fuente (lenguaje C++)
#include
#include
#include
#include // getch
#include
#define ENTER 13
#define BACKSPACE 8
#define INTENTOS 3
using namespace std;
int main()
{
vector usuarios;
vector claves;
// Se añaden usuarios al vector
usuarios.push_back("luis");
usuarios.push_back("jorge");
usuarios.push_back("james");
usuarios.push_back("johan");
usuarios.push_back("kevin");
// Se añaden claves al vector
claves.push_back("123");
claves.push_back("456");
claves.push_back("789");
claves.push_back("abc");
claves.push_back("efg");
string usuario, password;
int contador = 0;
bool ingresa = false;
do
{
system("cls");
cout << "\t\t\tLOGIN DE USUARIO" << endl;
cout << "\t\t\t----------------" << endl;
cout << "\n\tUsuario: ";
getline(cin, usuario);
char caracter;
cout << "\tPassword: ";
caracter = getch();
password = "";
while (caracter != ENTER)
{
if (caracter != BACKSPACE)
{
password.push_back(caracter);
cout << "*";
}
else
{
if (password.length() > 0)
{
cout << "\b \b";
password = password.substr(0, password.length() - 1);
}
}
caracter = getch();
}
for (int i = 0; i < usuarios.size(); i++)
{
if (usuarios[i] == usuario && claves[i] == password)
{
ingresa = true;
break;
}
}
if (!ingresa)
{
cout << "\n\n\tEl usuario y/o password son incorrectos" << endl;
cin.get();
contador++;
}
} while (ingresa == false && contador < INTENTOS);
if (ingresa == false)
{
cout << "\n\tUsted no pudo ingresar al sistema. ADIOS" << endl;
}
else
{
cout << "\n\n\tBienvenido al sistema" << endl;
/*
Aquí va el código del programa cuando el usuario ingresa sus credenciales correctas
*/
}
cin.get();
return 0;
}
Uso de conio.h y la Función getch()
conio.h: Esta es una librería de C/C++ utilizada principalmente en entornos de desarrollo que se ejecutan en DOS. Contiene funciones para manipular la entrada y salida de datos en la consola. Función getch(): Esta función captura un carácter del teclado pero no lo muestra en la consola, lo cual es útil para ingresar contraseñas sin revelarlas visualmente. En tu código, getch() es clave para ocultar los caracteres de la contraseña y mostrar asteriscos en su lugar.
Portabilidad de conio.h
Es importante mencionar que conio.h no forma parte del estándar de C++ y su uso se limita a ciertos compiladores, principalmente en sistemas basados en DOS/Windows. Por lo tanto, el código puede no ser portable a otros sistemas operativos como Linux o MacOS.
Explicación y funcionamiento
La explicación detalla del programa lo pueden encontrar directamente en los videos que dejo aquí abajo:
- Se declaran dos vectores de string (vector) llamados usuarios y claves donde se van a guardar los nombres de usuario (válidos) y sus respectivas claves (líneas 19 a 30).
vector usuarios;
vector claves;
// Se añaden usuarios al vector
usuarios.push_back("luis");
usuarios.push_back("jorge");
usuarios.push_back("james");
usuarios.push_back("johan");
usuarios.push_back("kevin");
// Se añaden claves al vector
claves.push_back("123");
claves.push_back("456");
claves.push_back("789");
claves.push_back("abc");
claves.push_back("efg");
- Se usa un bucle do-while para encerrar el bloque de código donde el programa pedirá y validará las credenciales ingresadas. La condición de repetición del bucle es que el contador de intentos sea menor que 3 y que la variable ingresa se mantenga en false. (ambas condiciones)
- El bucle termina si se sobrepasa la cantidad de intentos que es igual a 3 o si la variable ingresa cambia de false a true.
do {
// Código que pide las credenciales al usuario
} while (ingresa == false && contador < INTENTOS);
- Se usa la función getline para leer el nombre de usuario en una cadena normal (línea 43).
- Para leer la contraseña se utiliza la función getch, la cual lee caracter por caracter. Esta función solo lee mas no muestra caracter alguno en la pantalla, por lo que en la línea 58 imprimimos manualmente un asterisco por cada caracter leído.
- Los caracteres se leen dentro de un bucle while y la condición de repetición es que el caracter leído no sea el correspondiente a la tecla ENTER (cuyo código ASCII es 13).
- Se hace un análisis de cada caracter leído de tal manera que si el caracter leído no es ENTER ni tampoco BACKSPACE (tecla de retroceso) se concatena en la variable password (ver línea 57).
while (caracter != ENTER)
{
if (caracter != BACKSPACE)
{
password.push_back(caracter);
cout << "*";
}
else
{
if (password.length() > 0)
{
cout << "\b \b";
password = password.substr(0, password.length() - 1);
}
}
caracter = getch();
}

