Hola estoy comenzando con las listas, si alguien puede decirme caul es mi error el programa se me queda colgado en la funcion LeerDatosPersona y no encuentro el problema
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "Funciones.h"
void InicioSecion();
void RegistrarPersona();
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int opcion = 0, repite = 1;
do{
Presentacion();
Menu();
LeerCadena(Linea, M);
switch(opcion){
case 1:
break;
case 2:
RegistrarPersona();
break;
case 3:
break;
case 4:
repite = 0;
break;
default:
printf("\n\tOpcion Incorrecta: PRECIONE (1, 2, 3, 4)"); break;
}
}while(repite);
return 0;
}
void RegistrarPersona(){
Persona *persona;
int buscarCedula = 0, repite = 1;
char respuesta[M];
do{
Presentacion();
printf("\n\n\t\t\t .:Registro de Usuario:.\n");
LeerCadena(Linea, M);
sscanf(Linea
, "%d", &buscarCedula
);
if(!ExistePersona(buscarCedula, persona)){
persona = LeerDatosPersona(buscarCedula);
if (primer == NULL) primer = persona;
if (ultimo != NULL) ultimo->siguiente = persona;
ultimo = persona;
if (GuardarDatos(ultimo)){
Presentacion();
printf("\n\n\t\t\t .:Usuario Registrado Satisfactoriamente:.\n"); }else{
Presentacion();
printf("\n\n\t\t\t .:ERROR:.\n"); printf("\n\tIntentelo Mas tarde"); }
}else{
Presentacion();
printf("\n\n\t\t\t .:El Usuario %d ya EXISTE:.\n", buscarCedula
); printf("\n\tNo puede registrarse multiples veces\n"); }
printf("\n\tDesea registrar otra persona? [S/N]: "); LeerCadena(respuesta, M);
if (!(strcmp(respuesta
, "s") == 0 || strcmp(respuesta
, "S") == 0)){ repite = 0;
}
}while(repite);
}
Funciones.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Presentacion(){
}
void Menu(){
printf("\n\t\t[1]. Inicio de Sesion\n"); printf("\t\t[2]. Registro de Usuario\n"); printf("\t\t[3]. Administrador\n"); printf("\n\t\tIngrese su Opcion: [ ]\b\b"); }
#define M 100
char Linea[M];
typedef struct Persona{
char nombre[M];
char apellido[M];
char correo[M];
char password[M];
long int telefono;
int cedula;
struct Persona *siguiente;
}Persona;
Persona *primer = NULL;
Persona *ultimo = NULL;
int LeerCadena(char *cadena, int n){
int i, c;
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;
}
char ExistePersona(int buscarCedula, Persona *persona){
FILE
*archivo
= fopen ("DATOS.dat", "rb"); char existe;
if (archivo == NULL){
existe = 0;
}else{
existe = 0;
fread (&(*persona
), sizeof(persona
), 1, archivo
);
if (persona->cedula == buscarCedula){
existe = 1;
break;
}
fread (&(*persona
), sizeof(persona
), 1, archivo
); }
}
return existe;
}
Persona *LeerDatosPersona(int cedula){
Persona
*persona
= (Persona
*) malloc(sizeof(Persona
));
if (persona != NULL){
persona->cedula = cedula;
printf("\n\t\tPrimer Nombre: "); LeerCadena(persona->apellido, M);
printf("\n\t\tPrimer Apellido: "); LeerCadena(persona->apellido, M);
LeerCadena(persona->correo, M);
LeerCadena(persona->password, M);
LeerCadena(Linea, M);
sscanf(Linea
, "%d", persona
->telefono
);
persona->siguiente = NULL;
}else{
Presentacion();
printf("\n\n\t\t\t .:Memoria Insuficiente:.\n"); }
return persona;
}
char GuardarDatos(Persona *persona){
char guardar;
FILE
*archivo
= fopen ("DATOS.dat", "ab");
if (archivo == NULL){
guardar = 0;
}else{
fwrite (&(*persona
), sizeof(persona
), 1, archivo
); guardar = 1;
}
return guardar;
}