Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Superplay en 1 Diciembre 2010, 21:14 pm



Título: El que se ha metido en un bucle infinito soy yo...
Publicado por: Superplay en 1 Diciembre 2010, 21:14 pm
veréis, a continuación os pasaré una serie de códigos. Algunos simplemente son para que os guiéis, otros para que me digáis que está mal (con la parte previa señalada). Os identificaré que cual está para que os guiéis y que quiero realizar exactamente, a ver si me podéis ayudar lo antes posible, pues me he tirado toda la tarde intentando solucionar los errores de compilación de cierto paso de parámetro para que realice lo que tiene que hacer y entre errores y que no lo hace... miau. Muchas gracias de antemano.

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.