Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Rhessus

#11
Hola a todos.
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.