Tengo problemas con estas dos funciones void RegistrarUsuario(); void InicioSesion(); la registrar usuario me guarda el primer usuario cuando se crea al archivo pero luego me dice email registrado con todos los demás que intento guardar y inicio sesión después de introducir email y contraseña dice programa dejo de funcionar
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#define MAX 50
char Linea[MAX];
/* ----------------------
| Definir Estructuras |
----------------------*/
// Usuario
typedef struct Billetera{
char moneda[MAX];
float saldo;
}Monedas;
typedef struct Datos{
char nombre[MAX];
char apellido[MAX];
char telefono[MAX];
char pais[MAX];
}DatosPersonales;
typedef struct PerfilUsuario{
char e_mail[MAX];
char pasword[MAX];
DatosPersonales p;
Monedas m;
}Usuario;
// Administrador
typedef struct CompraVenta{
char moneda[MAX];
float precioD;
float precioE;
float precioBS;
float compra;
float venta;
}Moneda;
typedef struct PerfilAdministrador{
Moneda monedas;
}Administrador;
int MostrarMenu_BilleteraVirtual();
int MostrarMenu_InicioSesion();
int LeerCadena(char *cadena, int n);
int ConfirmarEmail(char email[], Usuario *usuario);
void InicioSesion();
void RegistrarUsuario();
void GuardarCuentaUsuario(Usuario *usuario);
void MenuPrincipal();
void MenuInicioSesion();
void FinalizarPrograma();
int main(){
switch(MostrarMenu_BilleteraVirtual()){
case 1:
system("cls");
InicioSesion();
system("cls");
break;
case 2:
system("cls");
RegistrarUsuario();
break;
case 3:
break;
case 4:
FinalizarPrograma();
break;
default:
system("cls");
printf("\n\t\t ===================");
printf("\n\t\t| Opcion incorrecta |");
printf("\n\t\t ===================");
MenuPrincipal();
main();
}
return 0;
}
int MostrarMenu_BilleteraVirtual(){
int opcion = 0;
printf("\n\t\t\t\t ===================");
printf("\n\t\t\t\t| Billetera Virtual |");
printf("\n\t\t\t\t ===================\n\n");
printf("\t\t[1] Ingresar como Usuario\n");
printf("\t\t[2] Registrarse\n");
printf("\t\t[3] Ingresar como Administrador\n");
printf("\t\t[4] Salir del Programa\n");
printf("\n\t\tDigite su opcion: [ ]\b\b");
LeerCadena(Linea, MAX);
sscanf(Linea, "%d", &opcion);
return opcion;
}
int MostrarMenu_InicioSesion(){
int opcion = 0;
printf("\t\t[1] Perfil de Usuario\n");
printf("\t\t[2] Su Billetera\n");
printf("\t\t[3] Comprar Criptomonedas\n");
printf("\t\t[4] Vender Criptomonedas\n");
printf("\t\t[5] Cerrar Sesion\n");
printf("\n\t\tDigite su opcion: [ ]\b\b");
LeerCadena(Linea, MAX);
sscanf(Linea, "%d", &opcion);
return opcion;
}
void RegistrarUsuario(){
Usuario usuario;
printf("\n\t\t\t\t ================");
printf("\n\t\t\t\t| Cree su Cuenta |");
printf("\n\t\t\t\t ================\n\n");
printf("\t\tNombre de pila: ");
LeerCadena(usuario.p.nombre, MAX);
printf("\t\tApellido: ");
LeerCadena(usuario.p.nombre, MAX);
printf("\n\t\tCorreo elctronico: ");
LeerCadena(usuario.e_mail, MAX);
printf("\t\tElegir una contasena: ");
LeerCadena(usuario.pasword, MAX);
if(ConfirmarEmail(usuario.e_mail, &usuario) == 0){
GuardarCuentaUsuario(&usuario);
MenuPrincipal();
}else{
printf("\n\t\tEste Email ya tiene Cuenta de Usuario");
MenuPrincipal();
}
}
void InicioSesion(){
FILE *archivo = fopen("BilleteraVirtualUsuarios.dat", "rb");
char pass[MAX], e_mail[MAX], encontrado;
Usuario usuario;
if(archivo == NULL){
printf("\n\t\t ========================");
printf("\n\t\t|Lo siento. ERROR Interno|");
printf("\n\t\t ========================");
MenuPrincipal();
}else{
encontrado = 0;
printf("\n\t\t\t =====================================");
printf("\n\t\t\t| Iniciar sesion en Billetera Virtual |");
printf("\n\t\t\t =====================================\n\n");
printf("\t\tCorreo electronico: ");
LeerCadena(e_mail, MAX);
printf("\t\tContrasena: ");
LeerCadena(pass, MAX);
/* Se recorre el archivo secuencialmente */
fseek(archivo, 0, SEEK_SET); /* Posiciona el cursor al principio del archivo */
fread(&usuario, sizeof(usuario), 1, archivo);
while(!feof(archivo)){
if((strcmp(usuario.e_mail, e_mail) == 0) && (strcmp(usuario.pasword, pass) == 0)){
encontrado = 1;
}
fread(&usuario, sizeof(usuario), 1, archivo);
}
if(encontrado == 1){
system("cls");
printf("\n\tBilletera Virtual\t\t%s %s\n\n", usuario.p.nombre, usuario.p.apellido);
switch(MostrarMenu_InicioSesion()){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
MenuPrincipal();
break;
default:
printf("\n\t\t ===================");
printf("\n\t\t| Opcion incorrecta |");
printf("\n\t\t ===================");
MenuInicioSesion();
break;
}
}else{
printf("\n\n\t\tUsuario no registrado");
MenuPrincipal();
}
fclose(archivo);
}
}
int ConfirmarEmail(char email[], Usuario *usuario){
FILE *archivo = fopen("BilleteraVirtualUsuarios.dat", "rb");
int existe;
if(archivo == NULL){
existe = 0;
}else{
existe = 0;
fread(usuario, sizeof(usuario), 1, archivo);
while(!feof(archivo)){
if(strcmp(usuario->e_mail, email) == 0){
existe = 1;
break;
}
fread(usuario, sizeof(usuario), 1, archivo);
}
fclose(archivo);
}
return existe;
}
void GuardarCuentaUsuario(Usuario *usuario){
FILE *archivo = fopen("BilleteraVirtualUsuarios.dat", "ab");
if(archivo == NULL){
printf("\n\t\t ========================");
printf("\n\t\t|Lo siento. ERROR Interno|");
printf("\n\t\t ========================");
MenuPrincipal();
}else{
fwrite(usuario, sizeof(usuario), 1, archivo);
fclose(archivo);
printf("\n\t\tUsuario Registrado con EXITO");
}
}
int LeerCadena(char *cadena, int n){
int i, c;
c = getchar();
if (c == EOF) {
cadena[0] = '\0';
return 0;
}
if (c == '\n') {
i = 0;
} else {
cadena[0] = c;
i = 1;
}
for (; i < n - 1 && (c = getchar()) != EOF && c != '\n'; i++) {
cadena[i] = c;
}
cadena[i] = '\0';
if (c != '\n' && c != EOF)
while ((c = getchar()) != '\n' && c != EOF);
return 1;
}
void MenuPrincipal(){
Sleep(3000);
system("cls");
main();
}
void MenuInicioSesion(){
Sleep(3000);
system("cls");
MostrarMenu_InicioSesion();
}
void FinalizarPrograma(){
system("cls");
printf("\n\t ===================================================");
printf("\n\t| LA Billetera Virtual CERRARA en Cualquier Momento |");
printf("\n\t ===================================================\n\n");
Sleep(3000);
exit(0);
}