Los dos archivos de cabecera que lleva mi programa... (NO MODIFICAR, ASÍ TAL CUAL TOMAR DE GUÍA):
contacto.h
Código:
#define N 200
struct contacto {
char nombre[N];
int telefono;
char email[N];
char web[N];
};
void llenar(struct contacto *c);
void mostrar(struct contacto);
agenda.h
Código:
#include "contacto.h"
#define N 200
#define MAX_CONTACTOS 10
struct agenda{
char propietario[N];
int numContactos;
struct contacto conjunto[MAX_CONTACTOS];
};
void inicializar_agenda (struct agenda * p_ag);
int esta_vacia (struct agenda ag);
int anyadir_contacto (struct agenda * p_ag);
void mostrar_contacto (struct agenda ag, char *nom);
void listar (struct agenda ag);
Código para poder implementar la cabecera contacto.h ... NO MODIFICAR, SÓLO TOMARLO COMO GUÍA:
contacto.c
Código:
#include <stdio.h>
#include "contacto.h"
void llenar(struct contacto *c){
printf("\nIntroduce nombre del contacto: ");
scanf("%s", (*c).nombre);
printf("Introduce el número de teléfono: ");
scanf("%d", &(*c).telefono);
printf("Introduce el correo del contacto: ");
scanf("%s", (*c).email);
printf("Introduce la página web del usuario: ");
scanf("%s", (*c).web);
}
void mostrar (struct contacto c){
printf("Nombre: %s\n", c.nombre);
printf("Teléfono: %d\n", c.telefono);
printf("E-Mail: %s\n", c.email);
printf("Página Web: %s\n", c.web);
}
Programa que hace que funcione cabecera agenda.h en el programa principal y el propio programa principal, por favor sólo modificar lo que señalo con comentarios, el resto dejar como está.
Código:
#include <stdio.h>
#include <stdlib.h>
#include "agenda.h"
void inicializar_agenda (struct agenda *ag){
printf("Ponga el nombre del propietario de esta agenda: \n");
scanf("%s", (*ag).propietario);
(*ag).numContactos=0;
}
int esta_vacia (struct agenda ag){
if(ag.numContactos==0)
return 1;
else return 0;}
//Está función que continua, tiene que ir mirando si el número de contactos es menor //o igual al máximo, permitir agregar otro contacto más dentro del vector de //estructuras conjunto[] e incrementar en uno la casilla de dicho vector para poder //almacenar otro contacto si se requiere más adelante. El contacto se llena con la //función llenar, hecha "efectiva" en contacto.h/contacto.c
int anyadir_contacto (struct agenda *ag){
if ((*ag).numContactos <= MAX_CONTACTOS){
llenar(ag);
(*ag).numContactos++;
(*ag).conjunto[];
}
}
//Esta función debe mostrar la información de cierto contacto al pasarle el nombre //desde el programa principal. Todo ello con la función mostrar de
//contacto.h/contacto.c
void mostrar_contacto(struct agenda ag, char nom[]){
printf("La información del contacto es:\n");
}
//Está función básicamente lista todos los datos de todos los contactos, leyendo cada casilla del vector.
void listar(struct agenda ag){
int i;
for (i=0;i<=ag.numContactos;i++){
}
}
Código:
#include <stdio.h>
#include <stdlib.h>
#include "agenda.h"
int main()
{
struct contacto c;
char *nombre[N];
int opcion;
inicializar_agenda(&c);
do{
printf("\n\n1-Añadir contacto\n");
printf("2-Mostrar contactos\n");
printf("3-Mostrar información que contiene la agenda\n");
printf("4-Listar información agenda\n");
printf("5-Salir\n");
printf("Por favor, introduzca que operación desea realizar: ");
scanf("%d", &opcion);
switch(opcion){
//No termina de funcionar bien al pasarle así el parámetro.
case 1:
anyadir_contacto(&c);
break;
case 2:
mostrar(c);
break;
case 3:
printf("Por favor, introduzca el nombre de susodicho contacto: ");
scanf("%s", nombre);
//Aquí quiero llamar a la función del mismo nombre de agenda.c/agenda.h pero no //sé como pasarle el parámetro correctamente, me da error.
mostrar_contacto(&nombre);
break;
case 4:
//Aquí quiero llamar a la función listar, no sé como ponerle el parámetro en si.
listar()
break;
case 5:
return 0;
break;}
}while(opcion!=5);
}
Sin más, ojalá podáis ayudarme, me duele la cabeza de estar toda la tarde viendo que le pasa. Muchas gracias.