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);
sscanf(Linea, "%d", &opcion);
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{
system ("cls");
Presentacion();
printf("\n\n\t\t\t .:Registro de Usuario:.\n");
printf("\n\tCedula: ");
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)){
system ("cls");
Presentacion();
printf("\n\n\t\t\t .:Usuario Registrado Satisfactoriamente:.\n");
}else{
system ("cls");
Presentacion();
printf("\n\n\t\t\t .:ERROR:.\n");
printf("\n\tIntentelo Mas tarde");
}
}else{
system ("cls");
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(){
printf("\n\t****");
printf("\n\t****");
}
void Menu(){
printf("\n\n\t\t\t .::.\n");
printf("\n\t\t[1]. Inicio de Sesion\n");
printf("\t\t[2]. Registro de Usuario\n");
printf("\t\t[3]. Administrador\n");
printf("\t\t[4]. Salir\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;
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;
}
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);
while(!feof(archivo)){
if (persona->cedula == buscarCedula){
existe = 1;
break;
}
fread (&(*persona), sizeof(persona), 1, archivo);
}
fclose(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);
printf("\n\t\tCorreo: ");
LeerCadena(persona->correo, M);
printf("\n\t\tContrasena: ");
LeerCadena(persona->password, M);
printf("\n\t\tTelefono: ");
LeerCadena(Linea, M);
sscanf(Linea, "%d", persona->telefono);
persona->siguiente = NULL;
}else{
system ("cls");
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;
fclose (archivo);
}
return guardar;
}
Linea 109 sscanf(Linea, "%d", persona->telefono);
te falto mandar por referencia la bariable
sscanf(Linea, "%d", &persona->telefono);
gracias no vi eso