Ver Mensaje Individual
  #7 (permalink)  
Antiguo 17/10/2014, 04:53
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: ¿Cómo fijar un dato de una estructura a la hora de introducirlo?

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 original
  1. struct poligono
  2. {
  3.     int n_lados;
  4.     char color[20];
  5.     poligono(int n, const char* c)
  6.     {
  7.         n_lados=n;
  8.         strcpy (color,c);
  9.     }
  10. };

La estructura que recoge la respuesta al dato n_lados:
Código C++:
Ver original
  1. struct respuesta_num_lados
  2. {
  3.     int numlados;
  4.     bool bloqueado;
  5.     respuesta_num_lados():bloqueado(false) {}
  6.     void fijar (int n)
  7.     {
  8.         bloqueado=true;
  9.         numlados=n;
  10.     }
  11.     void desbloquear()
  12.     {
  13.         bloqueado=false;
  14.     }
  15. };

Idem para el dato color

Código C++:
Ver original
  1. struct respuesta_color
  2. {
  3.     char color[20];
  4.     bool bloqueado;
  5.     respuesta_color():bloqueado(false) {}
  6.     void fijar (char* c)
  7.     {
  8.         strcpy (color,c);
  9.         bloqueado=true;
  10.     }
  11.     void desbloquear()
  12.     {
  13.         bloqueado=false;
  14.     }
  15. };

Y el programa que recoge la introducción de los datos:
Código C++:
Ver original
  1. int main()
  2. {
  3.     std::list<poligono>listapoligonos;
  4.     respuesta_num_lados num;
  5.     respuesta_color col;
  6.     char respuesta='d';
  7.     do
  8.         {
  9.             if (respuesta=='d' || respuesta=='D')
  10.                 {
  11.                     cout<<"(1) Fijar Nº de lados"<<endl<<"(2) Fijar Color"<<endl<<"(3) Desbloq. nº lados"<<endl
  12.                         <<"(4) Desbloq. color"<<endl<<"(5) Desbloq. ambos"<<endl<<"(ENTER) para seguir";
  13.                     string opcion;
  14.                     std::getline (cin,opcion);
  15.                     if (opcion=="1")
  16.                         {
  17.                             int n;
  18.                             cout<<"Numero lados: "<<endl;
  19.                             cin>>n;
  20.                             num.fijar(n);
  21.                         }
  22.                     if (opcion=="2")
  23.                         {
  24.                             char aux[20];
  25.                             cout<<"Color: "<<endl;
  26.                             cin>>aux;
  27.                             col.fijar(aux);
  28.                         }
  29.                     if (opcion=="3")
  30.                         {
  31.                             num.desbloquear();
  32.                         }
  33.                     if (opcion=="4")
  34.                         {
  35.                             col.desbloquear();
  36.                         }
  37.                     if (opcion=="5")
  38.                         {
  39.                             num.desbloquear();
  40.                             col.desbloquear();
  41.                         }
  42.                 }
  43.  
  44.             if (!num.bloqueado)
  45.                 {
  46.                     cout<<"Introduce nº de lados: "<<endl;
  47.                     cin>>num.numlados;
  48.                 }
  49.             if (!col.bloqueado)
  50.                 {
  51.                     cout<<"Introduce color: "<<endl;
  52.                     cin>>col.color;
  53.                 }
  54.             poligono P(num.numlados,col.color);
  55.             listapoligonos.push_back(P);
  56.             cout<<"¿Quieres introducir otro poligono?"<<std::endl;
  57.             cout<<"(S) para introducir (D) para fijar algun valor (N) Salir"<<std::endl;
  58.  
  59.             cin>>respuesta;
  60.             cin.get();
  61.         }
  62.     while (respuesta=='s' || respuesta=='S' || respuesta=='d' || respuesta=='D');
  63.    
  64.     cout<<"Los poligonos son: "<<endl;
  65.     for (auto it=listapoligonos.begin(); it!=listapoligonos.end(); it++)
  66.         {
  67.             cout<<(*it).n_lados<<" - "<<(*it).color<<endl;
  68.         }
  69. }