Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/11/2012, 16:10
antonio715
 
Fecha de Ingreso: agosto-2012
Ubicación: Alcalá
Mensajes: 37
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con estructura

He ejecutado sin problemas el código tal como me lo indicabas en tu post cotolon; o sea en la forma por valor.
Luego he intentado hacer lo mismo con el otro método, por referencia, que también me indicabas el código, pero no se ejecuta, compila bien pero al ejecutar la ventanita de ms dos se abre y se cierra inmediatamente, no sé se cambié sin querer algo:

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.     }

Además comentaros que he intentado poner la declaración de la estructura dentro de main, simplemente la cambie de lugar:

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

pero me da algunos errores de compilacion:

27 `clientes' does not name a type
39 variable or field `escribe_clientes' declared void
39 `clientes' was not declared in this scope
40 expected `,' or `;' before '{' token
64 `leer_clientes' undeclared (first use this function)
65 `escribe_clientes' cannot be used as a function

que no entiendo...
Gracias :)