Estoy haciendo una agenda en C, pero hay un error que no puedo llegar a vislumbrar.
Código
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct contact { char name[20]; char number[20]; char mail[20]; char address[20]; struct contact *next; } Contact; Contact *head = NULL; Contact *tail = NULL; void imprimirSeparador() { printf("=================================\n"); } void imprimirOpciones() { imprimirSeparador(); printf("Agenda\n"); printf("======\n"); printf("1. Agregar contacto\n"); printf("2. Mostrar contactos\n"); imprimirSeparador(); } void nuevoContacto(){ Contact *new; new = (Contact *)malloc(sizeof(Contact)); printf("Nombre: "); scanf("%s", new->name); printf("Número: "); scanf("%s", new->number); printf("Mail: "); scanf("%s", new->mail); printf("Dirección: "); scanf("%s", new->address); nuevoContactoLista(new->name, new->number, new->mail, new->address); } void nuevoContactoLista(char name[], char number[], char mail[], char address[]){ Contact *contactoNuevo, *aux; contactoNuevo = (Contact *)malloc(sizeof(Contact)); aux = head; if(aux != NULL){ while(aux != NULL) { if((strcmp(aux->name,name))==0){ printf("El nombre de contacto ingresado ya existe.\n"); printf("1. Intentar con otro nombre.\n"); printf("2. Volver al menú.\n"); submenu1(); } else{ aux = aux->siguiente; } } } else{ strcpy(contactoNuevo->name, name); } aux = head; if(aux != NULL){ while(aux != NULL) { if((strcmp(aux->number,number))==0){ printf("El número de teléfono ingresado ya existe.\n"); printf("1. Intentar con otro número.\n"); printf("2. Volver al menú.\n"); submenu1(); } else{ aux = aux->siguiente; } } } else{ strcpy(contactoNuevo->number, number); } strcpy(contactoNuevo->mail, mail); strcpy(contactoNuevo->address, address); contactoNuevo->next = NULL; /***************************************/ if(head==NULL){ head = contactoNuevo; printf("La información del contacto ha sido guardada exitosamente.\n"); } else{ aux = head; while(aux->next != NULL) { aux = aux->next; } aux->next = contactoNuevo; printf("La información del contacto ha sido guardada exitosamente.\n"); } } void submenu1(){ int opcion; scanf("%d", &opcion); switch(opcion) { case 1: nuevoContacto(); break; case 2: int main(); break; default: break; } } void imprimirContactos(){ Contact *auxiliar; auxiliar = head; printf("Contactos:\n"); if(auxiliar != NULL){ while(auxiliar != NULL) { printf("%s\t%s\t%s\t%s\n", auxiliar->name, auxiliar->number, auxiliar->mail, auxiliar->address); auxiliar = auxiliar->siguiente; } } else{ printf("Agenda vacía.\n"); } } int main() { int opcion; while(1) { imprimirOpciones(); scanf("%d", &opcion); switch(opcion) { case 1: nuevoContacto(); break; case 2: imprimirContactos(); break; default: break; } } }
Hay dos cosas particulares en el ejercicio: no pueden haber dos contactos que tengan el mismo nombre o número de teléfono, y es necesario que la información almacenada en nuevoContacto() pase a nuevoContactoLista().
Mi problema: no entiendo por qué no identifica la repetición cuando ingreso dos nombres de contacto iguales, además de no realizar ninguna acción al seleccionar la segunda opción.
Muchas gracias por su tiempo y esfuerzo.