Hola a todos.
Estoy haciendo una agenda en C, pero hay un error que no puedo llegar a vislumbrar.
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.
Estoy haciendo una agenda en C, pero hay un error que no puedo llegar a vislumbrar.
Código (bash) [Seleccionar]
#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.