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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda para eliminar un dato de una agenda, en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda para eliminar un dato de una agenda, en c  (Leído 9,417 veces)
alexander-pedro

Desconectado Desconectado

Mensajes: 2


Ver Perfil
ayuda para eliminar un dato de una agenda, en c
« en: 11 Julio 2013, 19:19 pm »

pasa que estoy creando una agenda en c,
y necesito eliminar una dato, ingresando el nombre de algun contacto.
como le hago?
hasta esto momentos llevo esto:


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

struct agenda{
   char nombre[200];
   char telefono[12];
   char cedula[20];
   struct agenda*sig;
}*princ, *fin;
int j=0;

void agregar(){
   struct agenda*nuevo;
   nuevo=(struct agenda*)malloc(sizeof(struct agenda));
   printf("\ndigite su nombre: ");
   fflush(stdin);
   scanf("%s", nuevo->nombre);
   fflush(stdin);
   printf("digite su telefono: ");
   scanf("%s", nuevo->telefono);
   printf("digite su cc: ");
   fflush(stdin);
   scanf("%s", nuevo->cedula);
   nuevo->sig=NULL;

   if(princ==NULL){
      princ=nuevo;
      fin=nuevo;
   }
   else{
      fin->sig=nuevo;
      fin=nuevo;
   }
      j++;

}

void imprimir(){
    printf("\nDATOS AGREGADOS HASTA EL MOMENTO\n");
   struct agenda*aux;
   aux=princ;

   if(aux==NULL){
      printf("agenda vacia vacia");
   }
   else{
      while(aux!=NULL){

         printf("\nnombre: %s", aux->nombre);
         printf("\ntelefono: %s",aux->telefono);
         printf("\ncedula: %s", aux->cedula);
         printf("\n--------------------------------------------\n");
         aux=aux->sig;
      }
   }
}

void eliminar(){
   struct agenda*aux;
   struct agenda*aux1;
   
   int cont;
   aux=princ;
   aux=princ;

   cont=0;
   printf("digite el nombre a eliminar");

   while(aux!=NULL){
      if(aux->nombre==aux1->nombre){
         if(cont==0){
            princ=princ->sig;
         }
      }
      aux=aux->sig;
      aux1=aux;
      cont=1;
   }

}

int main(){
   int opc;
   do{
      printf("\n1. ingresar datos a la agenda\n");
      printf("2. mostrar los datos de la agenda\n");
      printf("3. eliminar datos de la agenda\n");
      printf("4. eliminar\n");
      printf("\nintroduce una opcion: ");
      scanf("%d", &opc);
      system("cls");

      switch(opc){
         case 1:
            agregar();
            break;

         case 2:
            imprimir();
            break;

         case 3:
            eliminar();
            break;
         case 4:
            printf("salir");
         break;
      }
   }while(opc<4);
}


En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: ayuda para eliminar un dato de una agenda, en c
« Respuesta #1 en: 11 Julio 2013, 22:26 pm »

y si escribes los datos en un archivo y luego lo eliminas del archivo?


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: ayuda para eliminar un dato de una agenda, en c
« Respuesta #2 en: 12 Julio 2013, 09:41 am »

A ver, con la estructura agenda vas a tener una lista enlazada, si lo representamos gráficamente, después de tener varios contactos la estructura sería la siguiente:

agenda ( sig -> ) agenda ( sig -> ) agenda ...

Si lo representamos con números para poder explicarlo mejor quedaría así:

agenda0 ( sig -> ) agenda1 ( sig -> ) agenda2 ...

Esto básicamente quiere decir que tienes un elemento agenda0 cuyo puntero sig apunta al elemento agenda1 y así.

Si quieres eliminar agenda1 tendrías que conseguir que el sig de agenda0 apunte a agenda2 en vez de a agenda1. Y después, como buena práctica, hay que eliminar agenda1 para que no deje lagunas de memoria.

Los pasos serían más o menos estos:

Código
  1. struct agenda* anterior = 0;
  2. struct agenda* actual = princ;
  3.  
  4. while ( actual != 0 )
  5. {
  6.    if ( [actual es el elemento a eliminar] )
  7.    {
  8.      struct agenda* siguiente = actual->sig;
  9.      free( actual );
  10.  
  11.      if ( anterior != 0 )
  12.        anterior->sig = siguiente;
  13.      else
  14.        princ = siguiente; // Estamos borrando el primer elemento de la agenda
  15.  
  16.      if ( siguiente == 0 )
  17.        fin = anterior; // Estamos borrando el último elemento de la agenda.
  18.    }
  19.  
  20.    anterior = actual;
  21.    actual = actual->sig;
  22. }

En línea

aguml


Desconectado Desconectado

Mensajes: 378



Ver Perfil
Re: ayuda para eliminar un dato de una agenda, en c
« Respuesta #3 en: 15 Julio 2013, 11:43 am »

En tu codigo veo un fallo:
if(aux->nombre==aux1->nombre){
No puedes comparar dos arrays de caracteres asi, tienes que usar strcmp o strncmp.
En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: ayuda para eliminar un dato de una agenda, en c
« Respuesta #4 en: 15 Julio 2013, 12:24 pm »

Código
  1. void eliminar(){
  2.   struct agenda*aux;
  3.   struct agenda*aux1;
  4.  
  5.   int cont;
  6.   aux=princ;
  7.   aux=princ;
  8.  
  9.   cont=0;
  10.   printf("digite el nombre a eliminar");
  11.  
  12.   while(aux!=NULL){
  13.      if(aux->nombre==aux1->nombre){
  14.         if(cont==0){
  15.            princ=princ->sig;
  16.         }
  17.      }
  18.      aux=aux->sig;
  19.      aux1=aux;
  20.      cont=1;
  21.   }
  22.  
  23. }

Que demonios es eso?

No pides el nombre a eliminar, comparas cadenas con ==...

Sa1uDoS
En línea

aguml


Desconectado Desconectado

Mensajes: 378



Ver Perfil
Re: ayuda para eliminar un dato de una agenda, en c
« Respuesta #5 en: 16 Julio 2013, 11:00 am »

verdad, tampoco pides el nombre.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Php y mysql para agenda
PHP
dark_sargon 4 15,431 Último mensaje 7 Marzo 2009, 04:30 am
por dark_sargon
ayuda con una agenda
Java
fredycruz 1 3,581 Último mensaje 23 Abril 2010, 22:34 pm
por Debci
Ayuda codigo C++ (Agenda) « 1 2 3 »
Programación C/C++
L0R0 21 20,080 Último mensaje 22 Marzo 2011, 14:45 pm
por L0R0
¿Una variable es un dato o contiene un dato?
Programación General
theluigy13etv 6 4,598 Último mensaje 19 Agosto 2011, 23:01 pm
por theluigy13etv
Ayuda como insertar un dato de abajo para arriba ??
Java
sr600 0 1,750 Último mensaje 2 Diciembre 2012, 05:58 am
por sr600
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines