elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Lista enlazada en c en: 9 Febrero 2022, 18:50 pm
 ::) Buenos días, tengo un problema con el funcionamiento de este código, lo llevo en un curso y recientemente nos han enseñado C en Linux, el detalle que tengo es que al ingresar los datos ingresa la cedula y nombre pero a la segunda ronda el nombre se continua imprimiendo el mismo nombre de nuevo en todos los nuevos registros, espero alguien me pueda ayudar con mi consulta, gracias.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include<stdbool.h>// booleanos
  5. //Estructura Persona
  6. struct nodoPersona{
  7. int cedula;
  8. char *nombre;
  9. struct nodoPersona *ptrSiguienteNodoPersona;
  10. };
  11.  
  12. //Sinonimos para Persona
  13. typedef struct nodoPersona Persona;
  14. typedef Persona *ptrNodoPersona;
  15.  
  16. //Prototipos de funciones
  17. void insertarNodoPersona(ptrNodoPersona *nodoPersona, int pCedula, char *pNombre);
  18. void imprimeListaPersonas(ptrNodoPersona nodoInicial);
  19. ptrNodoPersona buscarPersonaPorCedula(ptrNodoPersona listaDePersonas, int pCedula);
  20. void eliminarNodoPersona(ptrNodoPersona *listaNodosPersona, int pCedula);
  21. void modificarNodoPersona(ptrNodoPersona *listaNodosPersona, int pCedula);
  22.  
  23. int main(void){
  24. int Opcion=1;
  25. int cont=0;
  26. //do{
  27. ptrNodoPersona nodoInicial = NULL;
  28.  
  29.  
  30.  
  31.  
  32. //scanf("%s", &Opcion);
  33.  
  34. insertarNodoPersona(&nodoInicial, 354488552, "Juan Camacho");
  35. insertarNodoPersona(&nodoInicial, 312578852, "Juanito Salas");
  36. insertarNodoPersona(&nodoInicial, 995512233, "Sandra Maroto");
  37. insertarNodoPersona(&nodoInicial, 884526568, "Luis Hernandez");
  38.  
  39.  
  40. imprimeListaPersonas(nodoInicial);
  41.  
  42.  
  43.  
  44. // int i;
  45. //eliminarNodoPersona(&nodoInicial, 500340876);
  46. //scanf("%s",);
  47.  
  48. while (Opcion != 0){
  49.  
  50. int cedulaBuscar = 0;
  51. char Nombre [50];
  52. printf("Digite la cedula a buscar: \n");
  53. scanf("%d", &cedulaBuscar);
  54.  
  55. if(buscarPersonaPorCedula(nodoInicial, cedulaBuscar) != NULL)
  56.    {
  57.     printf("La persona con nombre %s se encuentra en la lista \n", buscarPersonaPorCedula(nodoInicial, cedulaBuscar)->nombre);
  58.    }else{
  59.        printf("La persona con cedula %d NO se encuentra en la lista \n", cedulaBuscar);
  60.        printf("Se va a ingresar la Cedula %d \n", cedulaBuscar);
  61.        printf("Ingrese un Nombre \n" );
  62.        scanf("%s", Nombre); //va a tomar el dato ingresado
  63.        insertarNodoPersona (&nodoInicial, cedulaBuscar, Nombre); //ingresa el dato que es ingresado por el usuario junto con la cedula
  64.         imprimeListaPersonas(nodoInicial);
  65.        //++cont;
  66.        }
  67.  
  68. printf("Digite 0 para salir o cualquier tecla y enter para continual \n" );
  69. scanf("%d", &Opcion);
  70. //getch();
  71.    //return 0;
  72. }//Fin de la funcion main
  73.  
  74. //exit(0);
  75. }
  76. //Inserta Nodos de Persona
  77.  
  78.  
  79. void principal (){
  80.  
  81. }
  82. void insertarNodoPersona(ptrNodoPersona *nodoPersona, int pCedula, char *pNombre){
  83.  
  84. ptrNodoPersona ptrNuevo;
  85. ptrNodoPersona ptrAnterior;
  86. ptrNodoPersona ptrActual;
  87.  
  88. ptrNuevo = malloc(sizeof(Persona));
  89.  
  90. if(ptrNuevo != NULL){
  91.  
  92.  ptrNuevo->cedula = pCedula;  //->
  93.  //strcpy(ptrNuevo.nombre, pNombre);
  94.  ptrNuevo->nombre = pNombre;
  95.  
  96.  ptrAnterior = NULL;
  97.  ptrActual = *nodoPersona;
  98.  
  99.  while(ptrActual != NULL && pCedula > ptrActual->cedula){
  100.   ptrAnterior = ptrActual;
  101.   ptrActual = ptrActual->ptrSiguienteNodoPersona;
  102.  }//Fin del while acomodo por numero de cedula
  103.  
  104.  if(ptrAnterior == NULL){
  105.   ptrNuevo->ptrSiguienteNodoPersona = *nodoPersona;
  106.   *nodoPersona = ptrNuevo;
  107.  }
  108.  else{
  109.   ptrAnterior->ptrSiguienteNodoPersona = ptrNuevo;
  110.   ptrNuevo->ptrSiguienteNodoPersona = ptrActual;
  111.  }
  112. }//Fin de if de memoria disponible
  113. else{
  114.  printf("No se puede insertar la persona con la cedula %d por falta de memoria en el sistema. \n", pCedula);
  115. }//Fin de else no hay memoria disponible
  116.  
  117. }//Fin de la funcion insertarNodoPersona
  118.  
  119. void imprimeListaPersonas(ptrNodoPersona nodoInicial){
  120. if(nodoInicial == NULL){
  121.  printf("La lista de personas esta vacia.\n");
  122. }//Fin del if lista vacia
  123. else{
  124.  printf("Las personas almacenadas son:\n");
  125.  while(nodoInicial != NULL){
  126.   printf("%d %s\n", nodoInicial->cedula, nodoInicial->nombre);
  127.   nodoInicial = nodoInicial->ptrSiguienteNodoPersona;
  128.  }//Fin del while que recorre la lista
  129. }//Fin del else la lista no esta vacia
  130. }//Fin de la funcion imprimeListaPersonas
  131.  
  132. ptrNodoPersona buscarPersonaPorCedula(ptrNodoPersona listaDePersonas, int pCedula){
  133. ptrNodoPersona ptrPersona = NULL;
  134. if(listaDePersonas == NULL){
  135.  printf("La lista de personas esta vacia.\n");
  136. }// Fin de if lista vacia
  137. else{
  138.  while(listaDePersonas != NULL){
  139.   if(listaDePersonas->cedula == pCedula){
  140.    ptrPersona = listaDePersonas;
  141.   }//Fin del while
  142.   listaDePersonas = listaDePersonas->ptrSiguienteNodoPersona;
  143.  }//Fin del while de busqueda
  144. }// Fin del else si hay datos en la lista
  145.  
  146. return ptrPersona;
  147.  
  148. }// Fin de la funcion buscarPersonaPorCedula
  149.  
  150. void eliminarNodoPersona(ptrNodoPersona *listaNodosPersona, int pCedula){
  151. ptrNodoPersona ptrAnterior;
  152. ptrNodoPersona ptrActual;
  153. ptrNodoPersona ptrTemporal;
  154.  
  155. //Elimina el primer nodo
  156. if(pCedula == (*listaNodosPersona)->cedula){
  157.  ptrTemporal = *listaNodosPersona;
  158.  *listaNodosPersona = (*listaNodosPersona)->ptrSiguienteNodoPersona;
  159.  free(ptrTemporal);
  160.  printf("La persona con cedula %d, fue eliminada.\n", pCedula);
  161. }//Fin del if primer nodo
  162. else{
  163.  ptrAnterior = *listaNodosPersona;
  164.  ptrActual = (*listaNodosPersona)->ptrSiguienteNodoPersona;
  165.  
  166.  while(ptrActual != NULL && ptrActual->cedula != pCedula){
  167.   ptrAnterior = ptrActual;
  168.   ptrActual = ptrActual->ptrSiguienteNodoPersona;
  169.  }//Fin del while de busqueda
  170.  
  171.  //Elimina el nodo Actual
  172.  if(ptrActual != NULL){
  173.   ptrTemporal = ptrActual;
  174.   ptrAnterior->ptrSiguienteNodoPersona = ptrActual->ptrSiguienteNodoPersona;
  175.   free(ptrTemporal);
  176.   printf("La persona con cedula %d, fue eliminada.\n", pCedula);
  177.  }//Fin del if de eliminar
  178.  else{
  179.   printf("No se pudo eliminar la persona con cedula %d, verifique.\n", pCedula);
  180.  }//Fin del else no se elimino
  181. }//Fin de else para eliminar cualquier otro nodo
  182. }//Fin de la funcion eliminarNodoPersona
  183.  
  184. void modificarNodoPersona(ptrNodoPersona *listaNodosPersona, int pCedula){
  185. ptrNodoPersona ptrActual;
  186.  
  187. ptrActual = *listaNodosPersona;
  188.  while(ptrActual != NULL){
  189.   if(ptrActual->cedula == pCedula)
  190.   ptrActual->nombre = "El nombre asignado";
  191.  
  192.   ptrActual = ptrActual->ptrSiguienteNodoPersona;
  193.  }//Fin del while de busqueda
  194. }//Fin de la funcion modificarNodoPersona

MOD: Etiqueta GeSHi
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines