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() {
system("cls");
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("5.- Salir\n\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");
printf("Nombre: "); fflush(stdout);
gets(nuevo->nombre);
printf("Telefono: "); fflush(stdout);
gets(nuevo->telefono);
printf("Equipo: "); fflush(stdout);
gets(nuevo->equipo);
/* el campo siguiente va a ser NULL por ser el último elemento
de la lista */
nuevo->siguiente = NULL;
if (primero==NULL) {
printf( "Primer elemento\n");
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(){
free(primero=NULL);
}
int main() {
char opcion;
primero = (struct _agenda *) NULL;
ultimo = (struct _agenda *) NULL;
do {
mostrar_menu();
opcion = getch();
switch ( opcion ) {
case '1': anadir_elemento();
break;
case '2': borrar_elemento();
break;
case '3': mostrar_lista(primero);
break;
case '4': mostrar_magallanes();
break;
case '5': exit( 1 );
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
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
amigo y para eliminar un contacto en especifico por que como yo lo tengo borra TODOS los contactos me podrias pasar esa funcion ??
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:");
scanf("%s", 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;
free(auxiliar1);
}
else
if(auxiliar1 == ultimo)
{
ultimo = auxiliar2;
ultimo->siguiente = NULL;
free(auxiliar1);
}
else
{
auxiliar2->siguiente = auxiliar1->siguiente;
auxiliar1->siguiente = NULL;
free(auxiliar1);
}
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