Hola, tengo un problema con structs anidados.
tengo estos dos structs:
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:
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
has puesto
if(equipos[i].plantilla[equipos[i].qt_jug].dorsal=dorsal_aux)
Supongo que querras poner:
if(equipos[i].plantilla[equipos[i].qt_jug].dorsal == dorsal_aux)
Gracias por la respuesta, pero si hago eso me pone que el dorsal no existe y si existe.
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
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
Yo uso c++, scanf no se bien como se usa, pero aquí no te falta algo?
scanf("%s", nombre_aux);
scanf("%s", &nombre_aux);
no, a mi me han enseñado que al menos en c cuando son cadenas esto: & no se pone.
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
- Estas usando la variable qt_jug para comparar pero no asignas ningún valor.
- ¿En que momento buscas el dorsal?
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