Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/11/2012, 18:55
Avatar de cotolon
cotolon
 
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Problema con estructura

El problema es que cuando pasas

la estructura c1 a leer_clientes, manda una copia, y esta copia se le asigna al "parametro c1" (el c1 de la función) Por lo tanto cuando llenas los datos, se los llenas a c1 parámetro y no a c1 de main.

Hay 2 formas, (no sé si más, pero te muestro las 2). La primera es con punteros y la segunda es tal como lo tienes pero devolviendo (con return) un dato tipo cliente. Te dejo el código:

Código C++:
Ver original
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6.  
  7. using namespace std;
  8.  
  9. struct clientes
  10.     {
  11.         char nombre [50];
  12.         int numero_unidades;
  13.         float precio;
  14.         char estado; //p: pagado, m: moroso, a: atrasado
  15.     }c1;
  16.  
  17. /* FORMA POR REFERENCIA (con puntero): */
  18.  
  19. /*void leer_clientes (clientes *c1)
  20. {
  21.     cout<<"Introduzca el nombre del cliente: ";
  22.     cin.getline(c1->nombre, 50);
  23.     cout<<"Introduzca el numero de unidades: ";
  24.     cin>>c1->numero_unidades;
  25.     cout<<"Introduzca el precio: ";
  26.     cin>>c1->precio;
  27.     cout<<"Introduzca el estado (p: pagado, m: moroso, a: atrasado): ";
  28.     cin>>c1->estado;
  29. }*/
  30.  
  31. /* FORMA POR VALOR */
  32.  
  33. clientes leer_clientes (clientes c1) //Retornas un datos tipo cliente
  34. {
  35.     cout<<"Introduzca el nombre del cliente: ";
  36.     cin.getline(c1.nombre, 50);
  37.     cout<<"Introduzca el numero de unidades: ";
  38.     cin>>c1.numero_unidades;
  39.     cout<<"Introduzca el precio: ";
  40.     cin>>c1.precio;
  41.     cout<<"Introduzca el estado (p: pagado, m: moroso, a: atrasado): ";
  42.     cin>>c1.estado;
  43.     return c1; //regresamos los datos del cliente
  44. }
  45. void escribe_clientes (clientes c1)
  46. {
  47.      cout <<"Nombre del cliente: "<<c1.nombre<<endl;
  48.      cout <<"Numero de unidades: "<<c1.numero_unidades<<endl;
  49.      cout <<"Precio: "<<c1.precio<<" €"<<endl;
  50.      cout <<"Estado: ";
  51.      switch (c1.estado)
  52.        {
  53.         case 'p': cout <<"pagado"; break;
  54.         case 'm': cout <<"moroso"; break;
  55.         case 'a': cout <<"atrasado"; break;
  56.        }
  57.      cout<<endl;
  58. }
  59.  
  60. int main()
  61. {
  62.      //leer_clientes (&c1); //<- Forma Referencia con puntero
  63.      c1 = leer_clientes(c1); //<- Forma por Valor sin puntero
  64.      escribe_clientes (c1);
  65.  
  66.  
  67.     system("PAUSE");
  68.     return EXIT_SUCCESS;
  69.  
  70. }