/
Inicio :: Foros

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

estructura anidada

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



Registrado: 07 Jul 2014
Mensajes: 3

MensajePublicado: 07/07/2014 9:08 am
Título: estructura anidada

hola a todos. hace poco que he empezado un cursillo de c que encontre por internet. el curso explica una estructura anidada simple, mediante un ejemplo de un pequeño inventario de una tienda de musica. el programa pide para cada disco de musica las existencias en cd, cassette y disco, asi como los datos de los proveedores de ese disco. despues saca esos datos por pantalla. para un solo disco todo me funciona bien, pero el cursillo no explica como guardar los datos de varios discos a la vez.

he improvisado el siguiente codigo, que me va pidiendo los datos de 3 discos, pero despues solo me saca por pantalla los datos del primero que he introducido. haber si alguien me puede orientar donde puede estar el error y gracias de antemano:

Código:

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

#define ALBUMES   3

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 autor[40];
        char titulo[30];
        struct estruc_existencias existencias;
        struct estruc_proveedor proveedor;
        };

int main()
{
    struct estruc_existencias existencias[ALBUMES];
    struct estruc_proveedor proveedor[ALBUMES];
    struct estruc_inventario inventario[ALBUMES];
    int i, j;
   
   
    /* introduccion de datos */
    for( i=0; i<ALBUMES; i++ )
    {
         printf("\nAutor: ");
         gets(inventario[i].autor);
         printf("Titulo: ");
         gets(inventario[i].titulo);
         
         printf("\nExistencias de discos: ");
         scanf("%d", &inventario[i].existencias.discos);
         printf("Existencias de cintas: ");
         scanf("%d", &inventario[i].existencias.cintas);
         printf("Existencias de cd: ");
         scanf("%d", &inventario[i].existencias.cd);
         while(getchar() != '\n');                 /* vacia el buffer de entrada, ya que despues de usar SCANF, GETS da problemas */
         
         printf("\nNombre del proveedor: ");
         gets(inventario[i].proveedor.nombre_proveedor);
         printf("Telefono del proveedor: ");
         gets(inventario[i].proveedor.telefono_proveedor);
         printf("Direccion del proveedor: ");
         gets(inventario[i].proveedor.direccion_proveedor);
    }
   
    /* presentacion de datos */
    for( i=0; i<ALBUMES; i++ )
    {
         printf("\n-----\nAutor: %s\n", inventario[i].autor);
         printf("Titulo: %s\n\n", inventario[i].titulo);
         
         printf("Existencias de discos: %i\n", inventario[i].existencias.discos);
         printf("Existencias de cintas: %i\n", inventario[i].existencias.cintas);
         printf("Existencias de cd: %i\n\n", inventario[i].existencias.cd);
         
         printf("Nombre del proveedor: %s\n", inventario[i].proveedor.nombre_proveedor);
         printf("Telefono del proveedor: %s\n", inventario[i].proveedor.telefono_proveedor);
         printf("Direccion del proveedor: %s\n\n", inventario[i].proveedor.direccion_proveedor);
         
         getch();
         return 0;
    }
}
Volver arriba
vangodp



Registrado: 25 Ene 2014
Mensajes: 34

MensajePublicado: 09/07/2014 6:14 am
Título:

Saca el: getch(); y el return 0; de dentro del ultimo bucle for.
El problema es que return hace que termine la funcion imediatamente aparte de retornar el 0.

por ejemplo si hago una funcion con 4 o 5 returns el se va detener al primer que encuentre aparte de devolvernos un valor.


Código:
#include <stdio.h>
#include <stdlib.h>


int calculo ( int a, int b , char op ) {
    if ( op == '+' ) {
        return a+b;
    }
   
    if ( op == '-' ) {
        return a-b;
    }
   
    if ( op == '*' ) {
        return a*b;
    }
   
    if ( op == '/' && b != 0 ) { //Si divido por cero obtengo un error asi que b nunca puede ser 0
        return a/b;
    }
    printf("operacion no valida!\n");
    return 0;
}

int main () {
    int a = 30, b = 10;
    //sumamos
    printf ( "%d+%d=%d\n", a, b, calculo(a,b,'+') );
    //restamos                     
    printf ( "%d-%d=%d\n", a, b, calculo(a,b,'-') );
    //multiplicamos               
    printf ( "%d*%d=%d\n", a, b, calculo(a,b,'*') );
    //dividimos                   
    printf ( "%d/%d=%d\n", a, b, calculo(a,b,'/') );
    //enviamos a para que de un error
    calculo ( 10, 20, 'a' );
    getchar();
    return 0;
}

Suerte Wink Razz
Volver arriba
peta555



Registrado: 07 Jul 2014
Mensajes: 3

MensajePublicado: 10/07/2014 12:27 am
Título:

ese era el fallo. muchas gracias.
valla fallo mas tonto. venga mirar y cambiar cosas y era eso.
saludos Very Happy Very Happy
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