Siendo tus datos definidos
typedef struct {
int cocheID;
int clienteID;
} coche;
typedef struct {
coche coches[MAX_CARS];
int numcoches;
} tabla_taller;
La declaración de la función
void LocalizaCliente(coches taller1, int identificador)
es errónea.
coches es una variable del tabla_taller, no un tipo de dato. Si quisieras pasar a la función el dato
coches deberías declarar un puntero a
coche o un array. Al pasar un array o un puntero deberás pasarle también las dimensiones de éste porqué ese dato no acompaña a un array.
Debería quedarte así:
void LocalizaClientes(coche *lista, size_t size, int identificador)
Pero dentro de la función veo que quieres hacer uso del tipo de dato tabla_taller y, por otra parte, supongo que quieres que la función regrese el subíndice del coche que pertenece al cliente así que la declaración de la función debe ser:
int LocalizaClientes(tabla_taller taller, int identificador)
Dentro de la función mejor si haces un for (porqué básicamente iteras en una lista) que vaya desde 0 hasta el máximo número de coches. Actualmente lo haces hasta 99 y puede superar las dimensiones del array de coches del taller.
Una solución para hacer toda la función podría ser la siguiente:
int LocalizaCliente(tabla_taller taller, int identificador) {
int i;
int localizador = -1; /* Retornará -1 si no existe dicho cliente
* en el taller. */
for(i = 0; i < taller.numcoches; ++i)
if(taller_dado.coches[i].clienteId == identificador) {
localizador = i;
break;
}
}
return localizador;
}
He pasado la estructura por referencia porqué desconozco si habéis estudiado pasar parámetros por referencia a las funciones.