/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

inicializar estruct anidadada

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
peta555



Registrado: 07 Jul 2014
Mensajes: 3

MensajePublicado: 23/07/2014 2:18 am
Título: inicializar estruct anidadada

hola a todos hace unos dias me ayudasteis a resolver una duda sobre una estructura anidada (muchas gracias al compañero vangodp):
http://www.elrincondelc.com/nuevorincon/foros/viewtopic.php?t=21142

ahora estoy intentando hacer lo mismo pero inicializando con datos la estructura anidada, pero no doy con la forma de hacerlo. creo que el fallo esta en como introducir los datos en cada estructura, que luego se mostraran por pantalla:

#include <stdio.h>
#include <conio.h>

struct estruc_existencias {
int discos;
int cintas;
int cd;
};

struct estruc_proveedor {
char nombre_proveedor[40];
char telefono_proveedor[10];
char direccion_proveedor[100];
};

struct estruc_inventario {
char titulo[30];
char autor[40];
struct estruc_existencias existencias;
struct estruc_proveedor proveedor;
}inventario;

int main()
{
struct estruc_existencias existencias = {
{ 10, 20, 30 }, /* Iron Maiden */
{ 60, 70, 80 } /* AC/DC */
}; /*se introducen asi los datos?? */

struct estruc_proveedor proveedor[] = {
{ "Juanjo Lopez", "504-4342", "Barcelona" }, /* Iron Maiden */
{ "Marcos Gamindez", "405-4823", "Madrid" }, /* AC/DC */
}; /*se introducen asi los datos?? */

struct estruc_inventario inventario[] = {
{ "The Number of the Beast", "Iron Maiden", &existencias, &proveedor }, /* DUDAS: &existencias, &proveedor ¿¿se pone asi ?? */
{ "The Razors Edge", "AC/DC", &existencias, &proveedor }
}; /*se introducen asi los datos?? */

int i;
for( i=0; i<2; i++ )
{
printf( "%s\n ", inventario[i].existencias.discos );
printf( "%s\n ", inventario[i].existencias.cintas );
printf( "%s\n ", inventario[i].existencias.cd );

printf( "%s\n ", inventario[i].proveedor.nombre_proveedor );
printf( "%s\n ", inventario[i].proveedor.telefono_proveedor );
printf( "%s\n ", inventario[i].proveedor.direccion_proveedor );

printf( "%s\n ", inventario[i].titulo );
printf( "%s\n ", inventario[i].autor );
}

getch();
return 0;
}

haber si alguien me puede ayudar, como ya he dicho creo que estoy fallando en como introducir los datos dentro de cada estructura.

saludos y gracias de antemano
Volver arriba
vangodp



Registrado: 25 Ene 2014
Mensajes: 38

MensajePublicado: 23/07/2014 6:05 pm
Título:

Una buena forma seria usando Typedefs por que facilita a la hora de acceder a los datos seria algo tan sencillo como:
IronMaiden.cantidad.cds;

¿Chupi no?Laughing

te dejo un par de ejemplos:
Código:

#include <stdio.h>

//una buena forma seria usando typedef struct:
typedef struct{
    int discos;
    int cintas;
    int cds   
}CANTIDAD;

typedef struct{
    CANTIDAD cantidad;  //anidada... "CANTIDAD" esta definida por tipo como
}EXISTENCIAS;

int main() {
    EXISTENCIAS IronMaiden = { 10, 20, 30 }; //1º discos, 2º cintas y 3º cds
    EXISTENCIAS ACDC       = { 60, 70, 80 };
   
    printf("Iron Maiden:\n\n");
    printf( "Discos:\t\t%d\n", IronMaiden.cantidad.discos );
    printf( "Cintas:\t\t%d\n", IronMaiden.cantidad.cintas );   
    printf( "CompactDiscs:\t%d", IronMaiden.cantidad.cds );

    printf("\n\n===================\n\n");
   
    printf("AC/DC:\n\n");
    printf( "Discos:\t\t%d\n", ACDC.cantidad.discos );
    printf( "Cintas:\t\t%d\n", ACDC.cantidad.cintas );   
    printf( "CompactDiscs:\t%d", ACDC.cantidad.cds );
    getchar();
    return 0;
}


Otro ejemplo:
Código:

#include <stdio.h>

struct DATOS{
    char nombre[30];
    int  ndiscos;
};

struct EXISTENCIAS{
   struct DATOS banda1;
   struct DATOS banda2;
};

int main() {
    struct EXISTENCIAS existencias={
        { "Iron Maiden", 10 },
        { "AC/CD"      , 20 }   
    };
   
    //Ahora debes tener claro que hay 2 objetos tipos datos dentro de la extructura "EXISTENCIAS"...
    //...(banda1 y banda2) cada uno contiene una estructura tipo DATOS que contiene nombre y numerodiscos
   
    //La forma de acceder a los datos de iron maiden son:
    printf("Nombre banda: \t\t%s \nCantidad de discos: \t%d",  existencias.banda1.nombre, existencias.banda1.ndiscos);
   
   
   
    getchar(); //No uses conio.h solo para pausar por que es un disparate "Mejor no uses nunca a conio XD"
    return 0;
}


Espero que te sirva.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com