Test Foro de elhacker.net SMF 2.1

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 (cpp) [Seleccionar]
typedef struct jugadors{
                  char nombre_j[20];
                  char apellido_j[20];
                  int dorsal;
           }tjugador;
           
   struct equip{
                char nombre_e[20];
                int ano_fundacio;
                tjugador plantilla[25];
                int qt_jug;
                }equipos[20];

y un apartado del programa es borrar el jugador introduciendo el nombre del equipo y su dorsal.
Tengo este codigo:
Código (cpp) [Seleccionar]
printf("Introduce Nombre Equipo:\n");
scanf("%s", nombre_aux);
fflush(stdin);
                         
i=0;
while((i<equipos[i].qt_jug) && (strcmp(equipos[i].nombre_e,nombre_aux)!=0)){
                                           i++;
                                           }
if(strcmp(equipos[i].nombre_e,nombre_aux)==0){
                                                                 printf("Introduce Dorsal:\n");
                                                                 scanf("%d", &dorsal_aux);
                                                                 fflush(stdin);
                                                                  if(equipos[i].plantilla[equipos[i].qt_jug].dorsal=dorsal_aux){
                                                                                  for(j=i+1;j<equipos[i].qt_jug;j++){
                                                                                                                                                                     equipos[i].plantilla[j-1]=equipos[i].plantilla[j];
                                                                                                                                                             }
                                                                                                                               equipos[i].qt_jug--;
                                                                                                                               printf("Jugador Eliminado\n");
                                                                                                                               }
                                                                  else{
                                                                       printf("Este Dorsal no existe\n");
                                                                       }
                                                                 }
else{
      printf("Este equipo no existe\n");
       }

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 (cpp) [Seleccionar]

if(equipos[i].plantilla[equipos[i].qt_jug].dorsal=dorsal_aux)

Supongo que querras poner:
Código (cpp) [Seleccionar]

if(equipos[i].plantilla[equipos[i].qt_jug].dorsal == dorsal_aux)
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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]

scanf("%s", nombre_aux);

Código (cpp) [Seleccionar]

scanf("%s", &nombre_aux);
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
Cita de: JHodges en 10 Junio 2015, 18:30 PMy 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):
i=0;
while((i<equipos[i].qt_jug) && (strcmp(equipos[i].nombre_e,nombre_aux)!=0)){
   i++;
}

Porque "equipos[ i ].qt_jug" es el numero de jugadores en la plantilla del equipo "i".

A continuación tienes la sentencia condicional:
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