Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: JHodges en 10 Junio 2015, 18:30 pm



Título: Ayuda con borrado en estructuras anidadas
Publicado por: JHodges en 10 Junio 2015, 18:30 pm
Hola, tengo un problema con structs anidados.
tengo estos dos structs:  

Código
  1. typedef struct jugadors{
  2.                   char nombre_j[20];
  3.                   char apellido_j[20];
  4.                   int dorsal;
  5.            }tjugador;
  6.  
  7.    struct equip{
  8.                 char nombre_e[20];
  9.                 int ano_fundacio;
  10.                 tjugador plantilla[25];
  11.                 int qt_jug;
  12.                 }equipos[20];
y un apartado del programa es borrar el jugador introduciendo el nombre del equipo y su dorsal.
Tengo este codigo:
Código
  1. printf("Introduce Nombre Equipo:\n");
  2. scanf("%s", nombre_aux);
  3. fflush(stdin);
  4.  
  5. i=0;
  6. while((i<equipos[i].qt_jug) && (strcmp(equipos[i].nombre_e,nombre_aux)!=0)){
  7.                                            i++;
  8.                                            }
  9. if(strcmp(equipos[i].nombre_e,nombre_aux)==0){
  10.                                                                  printf("Introduce Dorsal:\n");
  11.                                                                  scanf("%d", &dorsal_aux);
  12.                                                                  fflush(stdin);
  13.                                                                   if(equipos[i].plantilla[equipos[i].qt_jug].dorsal=dorsal_aux){
  14.                                                                                   for(j=i+1;j<equipos[i].qt_jug;j++){
  15.                                                                                                                                                                      equipos[i].plantilla[j-1]=equipos[i].plantilla[j];
  16.                                                                                                                                                              }
  17.                                                                                                                                equipos[i].qt_jug--;
  18.                                                                                                                                printf("Jugador Eliminado\n");
  19.                                                                                                                                }
  20.                                                                   else{
  21.                                                                        printf("Este Dorsal no existe\n");
  22.                                                                        }
  23.                                                                  }
  24. else{
  25.       printf("Este equipo no existe\n");
  26.        }
  27.  
El problema es que aunque tenga 3 jugadores me elimina el primero no el dorsal introducido. Como podria solucionarlo?
Gracias.

Mof: Los códigos deben ir en etiquetas GeSHi


Título: Re: Ayuda con borrado en estructuras anidadas
Publicado por: user-marcos en 10 Junio 2015, 18:38 pm
has puesto
Código
  1. if(equipos[i].plantilla[equipos[i].qt_jug].dorsal=dorsal_aux)
  2.  
Supongo que querras poner:
Código
  1. if(equipos[i].plantilla[equipos[i].qt_jug].dorsal == dorsal_aux)
  2.  


Título: Re: Ayuda con borrado en estructuras anidadas
Publicado por: JHodges en 10 Junio 2015, 18:41 pm
Gracias por la respuesta, pero si hago eso me pone que el dorsal no existe y si existe.


Título: Re: Ayuda con borrado en estructuras anidadas
Publicado por: engel lex en 10 Junio 2015, 18:44 pm
básicamente acabas de decir "como el código no funciona, decidí interpretarlo como un error del compilador"

comparación es "==" si o si...

"=" es asignación... es decir
Código
  1. equipos[i].plantilla[equipos[i].qt_jug].dorsal

va a pasar a contener dorsal_aux y if funcionará si dorsal_aux no es false o 0


Título: Re: Ayuda con borrado en estructuras anidadas
Publicado por: user-marcos en 10 Junio 2015, 18:49 pm
Yo uso c++, scanf no se bien como se usa, pero aquí no te falta algo?
Código
  1. scanf("%s", nombre_aux);
  2.  
Código
  1. scanf("%s", &nombre_aux);
  2.  


Título: Re: Ayuda con borrado en estructuras anidadas
Publicado por: JHodges en 10 Junio 2015, 18:50 pm
no, a mi me han enseñado que al menos en c cuando son cadenas esto: & no se pone.


Título: Re: Ayuda con borrado en estructuras anidadas
Publicado por: Gh057 en 10 Junio 2015, 18:56 pm
Hola JHodges , lo primero que veo es que la limpieza del buffer con fflush debes hacerla antes del scanf. Luego como bien te han indicado, el condicional if se refiere a una preposición lógica de comparación contra el auxiliar; si utilizas "=" estás asignando... por ende, obtendrás siempre la misma respuesta. Saludos


Título: Re: Ayuda con borrado en estructuras anidadas
Publicado por: user-marcos en 10 Junio 2015, 19:06 pm
- Estas usando la variable qt_jug para comparar pero no asignas ningún valor.
- ¿En que momento buscas el dorsal?


Título: Re: Ayuda con borrado en estructuras anidadas
Publicado por: rir3760 en 11 Junio 2015, 04:24 am
y un apartado del programa es borrar el jugador introduciendo el nombre del equipo y su dorsal.
En ese caso debes debes utilizar un bucle donde iteres hasta encontrar un equipo que coincida con el nombre indicado o bien el contador del bucle sea igual al numero de equipos existente. Ese ultimo valor lo debes tener almacenado en alguna variable con un nombre como "num_equipos", "cant_equipos", etc.

No puedes utilizar (esta mal esta parte del fragmento):
Código
  1. i=0;
  2. while((i<equipos[i].qt_jug) && (strcmp(equipos[i].nombre_e,nombre_aux)!=0)){
  3.   i++;
  4. }
Porque "equipos[ i ].qt_jug" es el numero de jugadores en la plantilla del equipo "i".

A continuación tienes la sentencia condicional:
Código
  1. if (strcmp(equipos[i].nombre_e,nombre_aux) == 0) ...
No es necesario otra llamada a strcmp ya que puedes reutilizar el valor de la variable "i": si esta es menor que el numero de equipos indica una coincidencia (equipo encontrado), si es igual al numero de equipos implica que no no hay uno con el nombre indicado.

A continuación debes buscar, de forma similar, al jugador que coincida con el dorsal indicado algo que no haces.

Un saludo