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#include<iostream>
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
struct clientes
{
char nombre [50];
int numero_unidades;
float precio;
char estado; //p: pagado, m: moroso, a: atrasado
}c1;
/* FORMA POR REFERENCIA (con puntero): */
void leer_clientes (clientes *c1)
{
cout<<"Introduzca el nombre del cliente: ";
cin.getline(c1->nombre, 50);
cout<<"Introduzca el numero de unidades: ";
cin>>c1->numero_unidades;
cout<<"Introduzca el precio: ";
cin>>c1->precio;
cout<<"Introduzca el estado (p: pagado, m: moroso, a: atrasado): ";
cin>>c1->estado;
}
/* FORMA POR VALOR
clientes leer_clientes (clientes c1) //Retornas un datos tipo cliente
{
cout<<"Introduzca el nombre del cliente: ";
cin.getline(c1.nombre, 50);
cout<<"Introduzca el numero de unidades: ";
cin>>c1.numero_unidades;
cout<<"Introduzca el precio: ";
cin>>c1.precio;
cout<<"Introduzca el estado (p: pagado, m: moroso, a: atrasado): ";
cin>>c1.estado;
return c1; //regresamos los datos del cliente
}*/
void escribe_clientes (clientes c1)
{
cout <<"Nombre del cliente: "<<c1.nombre<<endl;
cout <<"Numero de unidades: "<<c1.numero_unidades<<endl;
cout <<"Precio: "<<c1.precio<<" €"<<endl;
cout <<"Estado: ";
switch (c1.estado)
{
case 'p': cout <<"pagado"; break;
case 'm': cout <<"moroso"; break;
case 'a': cout <<"atrasado"; break;
}
cout<<endl;
}
int main()
{
leer_clientes (&c1); //<- Forma Referencia con puntero
// c1 = leer_clientes(c1); //<- Forma por Valor sin puntero
escribe_clientes (c1);
return EXIT_SUCCESS;
}
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#include<iostream>
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
/* FORMA POR REFERENCIA (con puntero): */
/*void leer_clientes (clientes *c1)
{
cout<<"Introduzca el nombre del cliente: ";
cin.getline(c1->nombre, 50);
cout<<"Introduzca el numero de unidades: ";
cin>>c1->numero_unidades;
cout<<"Introduzca el precio: ";
cin>>c1->precio;
cout<<"Introduzca el estado (p: pagado, m: moroso, a: atrasado): ";
cin>>c1->estado;
}*/
/* FORMA POR VALOR */
clientes leer_clientes (clientes c1) //Retornas un datos tipo cliente
{
cout<<"Introduzca el nombre del cliente: ";
cin.getline(c1.nombre, 50);
cout<<"Introduzca el numero de unidades: ";
cin>>c1.numero_unidades;
cout<<"Introduzca el precio: ";
cin>>c1.precio;
cout<<"Introduzca el estado (p: pagado, m: moroso, a: atrasado): ";
cin>>c1.estado;
return c1; //regresamos los datos del cliente
}
void escribe_clientes (clientes c1)
{
cout <<"Nombre del cliente: "<<c1.nombre<<endl;
cout <<"Numero de unidades: "<<c1.numero_unidades<<endl;
cout <<"Precio: "<<c1.precio<<" €"<<endl;
cout <<"Estado: ";
switch (c1.estado)
{
case 'p': cout <<"pagado"; break;
case 'm': cout <<"moroso"; break;
case 'a': cout <<"atrasado"; break;
}
cout<<endl;
}
int main()
{
struct clientes
{
char nombre [50];
int numero_unidades;
float precio;
char estado; //p: pagado, m: moroso, a: atrasado
}c1;
//leer_clientes (&c1); //<- Forma Referencia con puntero
c1 = leer_clientes(c1); //<- Forma por Valor sin puntero
escribe_clientes (c1);
return EXIT_SUCCESS;
}
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 :)