Buenas, estoy escribiendo un programa en C con visual studio que te permite definir una contraseña.
En el programa, tu a medida que vas escribiendo caracteres te va imprimiendo *, el caso es que no se como hacer que al presionar la tecla de retroceso borre el anterior asterisco, no sé si me podréis ayudar, gracias de antemano
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<conio.h>
#define length 16 //Longitud máxima de la contraseña
char* Password();
void main()
{
char *pass1,*pass2;
int cmp=1;
do
{
printf("Introduce una clave de %d caracteres: ", length
); pass1 = Password();
printf("Introduce de nuevo la clave de %d caracteres: ", length
); pass2 = Password();
if (cmp == 0)
printf("Clave introducida correctamente!!\n"); else
printf("Las claves no coinciden\n"); if (cmp != 0)
} while (cmp != 0);
}
char* Password()
{
char *pass,c = 0;
int i;
//Asignacion de memoria para los caracteres y '\0'
pass
= (char*)malloc((length
)+1); if (pass == NULL)
{
printf("No hay memoria disponible\n"); }
//Compobacion de que como mucho tiene los caracteres que hemos indicado. Cada vez que escribes un caracter, imprime *
do
{
i = 0;
while (c != 13) //Si no presionamos intro
{
if (i < 18) //Si la contraseña cabe en la cadena, se va introduciendo
{
c = _getch();
if (c != 8 && c != 13)
{
pass[i] = c;
}
if (c == 8) //Pulsa retroceso
{
c = NULL;
i = i - 2;
}
}
else //Si no entra siemplemente se imprimen los *, luego te mandara repetir contraseña
{
c = _getch();
if (c != 8&&c!=13)
{
}
if (c == 8)
{
c = NULL;
i = i - 2;
}
}
if (c == 13) //Pulsa intro
{
if (i < ((length)+1))
pass[i] = '\0';
else
{
pass[(length)+1] = '\0';
}
i--;
}
i++;
}
if(i>length)
printf("Error de longitud, introducela de nuevo: "); c = 0;
} while (i > length);
//Reasignacion de memoria para optimizar
pass
= (char*)realloc(pass
, i
* sizeof(char) + 1); return pass;
}