Título: mostrar contactos de una agenda por equipo
Publicado por: attackers en 24 Noviembre 2011, 18:01 pm
amigos tengo una agenda pero quiero una opcion de mostrar todos los contactos que sean del equipo caraquista aqui le dejo el codig paa ver si me pueden ayudar #include <stdio.h> struct _agenda { char nombre[20]; char telefono[12]; char equipo[20]; struct _agenda *siguiente; }; struct _agenda *primero, *ultimo; void mostrar_menu() { printf("\n\nMenu:\n=====\n\n"); printf("1.- Agregar elementos\n"); printf("2.- Borrar elementos\n"); printf("3.- Mostrar contacto\n"); printf("4.- Mostrar contacto magallanero\n"); printf("Escoge una opcion: ");fflush (stdout ); } void anadir_elemento() { struct _agenda *nuevo; /* reservamos memoria para el nuevo elemento */ nuevo = (struct _agenda *) malloc(sizeof(struct _agenda )); if (nuevo ==NULL ) printf( "No hay memoria disponible!\n"); printf("\nNuevo elemento:\n"); /* el campo siguiente va a ser NULL por ser el último elemento de la lista */ nuevo->siguiente = NULL; if (primero==NULL) { primero = nuevo; ultimo = nuevo; } else { /* el que hasta ahora era el último tiene que apuntar al nuevo */ ultimo->siguiente = nuevo; /* hacemos que el nuevo sea ahora el último */ ultimo = nuevo; } } void mostrar_lista() { struct _agenda *auxiliar; int i; i=0; auxiliar = primero; printf("\nMostrando la lista completa:\n"); while (auxiliar!=NULL) { printf( "Nombre: %s \n Telefono: %s \n equipo: %s\n", auxiliar->nombre,auxiliar->telefono,auxiliar->equipo); auxiliar = auxiliar->siguiente; i++; } if (i ==0) printf( "\nLa agenda esta vacia!!\n" ); } void mostrar_magallanes() { int x; struct _agenda *auxiliar; printf("\nLos contacto magallaneros son: \n"); for(x=0; x < 5; x++) { if(strcmp(primero ->equipo [x ],"magallanero") == 0) { printf("los contactos magallanero son"); printf("\nEl nombre es: %s \n",auxiliar ->nombre [x ]); printf ("el telefono: %s \n",auxiliar ->telefono [x ]); } } } void borrar_elemento(){ } int main() { char opcion; primero = (struct _agenda *) NULL; ultimo = (struct _agenda *) NULL; do { mostrar_menu(); switch ( opcion ) { case '1': anadir_elemento(); break; case '2': borrar_elemento(); break; case '3': mostrar_lista(primero); break; case '4': mostrar_magallanes(); break; default: printf( "Opción no válida\n" ); break; } } while (opcion!='5'); }
http://pastebin.com/SvxGbaRZ en la linea 75 a 91 esta la funcion que mas o menos quiero pero no se trabajar con punteros
Título: Re: mostrar contactos de una agenda por equipo
Publicado por: satu en 24 Noviembre 2011, 19:20 pm
Hola Te pongo sólo el código de la función void mostrar_magallanes() { struct _agenda *auxiliar = primero; printf("\nLos contacto magallaneros son: \n"); while(auxiliar != NULL) { if(strcmp(auxiliar ->equipo ,"magallanero") == 0) { printf("\nEl nombre es: %s \n",auxiliar ->nombre ); printf ("el telefono: %s \n",auxiliar ->telefono ); } auxiliar = auxiliar->siguiente; } }
Saludos
Título: Re: mostrar contactos de una agenda por equipo
Publicado por: attackers en 24 Noviembre 2011, 21:50 pm
amigo y para eliminar un contacto en especifico por que como yo lo tengo borra TODOS los contactos me podrias pasar esa funcion ??
Título: Re: mostrar contactos de una agenda por equipo
Publicado por: satu en 24 Noviembre 2011, 22:20 pm
Hola Para borrar un único elemento sería algo así: void borrar_elemento() { int borrado = 0; char nombre[20]; struct _agenda *auxiliar1 = primero, *auxiliar2 = NULL; printf("Introduce el nombre:"); while(getchar() != '\n'); //Limpiamos el buffer while((auxiliar1 != NULL) && (borrado == 0)) { if(strcmp(auxiliar1 ->nombre , nombre ) == 0) borrado = 1; else { auxiliar2 = auxiliar1; auxiliar1 = auxiliar1->siguiente; } } if(borrado == 1) { if(auxiliar1 == primero) { primero = primero->siguiente; auxiliar1->siguiente = NULL; } else if(auxiliar1 == ultimo) { ultimo = auxiliar2; ultimo->siguiente = NULL; } else { auxiliar2->siguiente = auxiliar1->siguiente; auxiliar1->siguiente = NULL; } printf("El elemento con nombre %s ha sido borrado\n", nombre ); } else printf("El elemento con nombre %s no se encuentra\n", nombre ); }
Lo he hecho a ojo sin probarlo pero los tiros van por ahí. Saludos
|