Hola eferion:
Gracias por la respuesta. Se acerca a lo que yo quería simular.
El caso es que he hecho un planteamiento, que aunque funciona, no me gusta demasiado. Se trata de crear una estructura para tratar las respuestas a introducir.
A favor:
1.-Que funciona (o eso parece)
En contra:
1.-Demasiado farragoso
2.-Estas estructuras han de estar íntimamente ligadas a la estructura a la que sirven de soporte, y si ésta cambia hay que ir cambiando la estructuras que recogen las respuestas. Esto puede parecer trivial en este ejemplo, pero si tuviéramos algo más serio o más grande creo que no sería muy viable.
Pero lo pongo a ver qué opináis:
Mi estructura del polígono:
Código C++:
Ver originalstruct poligono
{
int n_lados;
char color[20];
poligono(int n, const char* c)
{
n_lados=n;
}
};
La estructura que recoge la respuesta al dato
n_lados:
Código C++:
Ver originalstruct respuesta_num_lados
{
int numlados;
bool bloqueado;
respuesta_num_lados():bloqueado(false) {}
void fijar (int n)
{
bloqueado=true;
numlados=n;
}
void desbloquear()
{
bloqueado=false;
}
};
Idem para el dato
color
Código C++:
Ver originalstruct respuesta_color
{
char color[20];
bool bloqueado;
respuesta_color():bloqueado(false) {}
void fijar (char* c)
{
bloqueado=true;
}
void desbloquear()
{
bloqueado=false;
}
};
Y el programa que recoge la introducción de los datos:
Código C++:
Ver originalint main()
{
std::list<poligono>listapoligonos;
respuesta_num_lados num;
respuesta_color col;
char respuesta='d';
do
{
if (respuesta=='d' || respuesta=='D')
{
cout<<"(1) Fijar Nº de lados"<<endl<<"(2) Fijar Color"<<endl<<"(3) Desbloq. nº lados"<<endl
<<"(4) Desbloq. color"<<endl<<"(5) Desbloq. ambos"<<endl<<"(ENTER) para seguir";
string opcion;
std::getline (cin,opcion);
if (opcion=="1")
{
int n;
cout<<"Numero lados: "<<endl;
cin>>n;
num.fijar(n);
}
if (opcion=="2")
{
char aux[20];
cout<<"Color: "<<endl;
cin>>aux;
col.fijar(aux);
}
if (opcion=="3")
{
num.desbloquear();
}
if (opcion=="4")
{
col.desbloquear();
}
if (opcion=="5")
{
num.desbloquear();
col.desbloquear();
}
}
if (!num.bloqueado)
{
cout<<"Introduce nº de lados: "<<endl;
cin>>num.numlados;
}
if (!col.bloqueado)
{
cout<<"Introduce color: "<<endl;
cin>>col.color;
}
poligono P(num.numlados,col.color);
listapoligonos.push_back(P);
cout<<"¿Quieres introducir otro poligono?"<<std::endl;
cout<<"(S) para introducir (D) para fijar algun valor (N) Salir"<<std::endl;
cin>>respuesta;
cin.get();
}
while (respuesta=='s' || respuesta=='S' || respuesta=='d' || respuesta=='D');
cout<<"Los poligonos son: "<<endl;
for (auto it=listapoligonos.begin(); it!=listapoligonos.end(); it++)
{
cout<<(*it).n_lados<<" - "<<(*it).color<<endl;
}
}