En C++ existen ya las listas. No hace falta que hagas una desde cero. *registrar_cliente() = aux; es un código muy extraño, deberías hacerlo más intuitivo. Por ejemplo algo así:
Código:
registrar_cliente(aux); // o misClientes.registrar(aux);
Te diría que algo de electrónica digital: Álgebra de Boole, álgebra binaria, registros, memorias, codificadores/decodificadores, multiplexadores/demultiplexadores y todas estas cositas básicas. Después todo esto viene bien a la hora de desarrollar programas porque vas a escribir programas más eficientes. En microelectrónica uno no puede malgastar recursos, encarece el circuito, lo hace más grande y propenso a errores; y si llevas esto a tus programas terminan siendo más cortos, rápidos y elegantes.
Tienes el operador sizeof() para conocer el tamaño de tu dato y junto con dos operadores, el de desplazamiento ( << ) y el AND a nivel de bit ( & ) tienes las herramientas necesarias para realizar tu programa.
Ya que cada caden es una línea del archivo tómala con fgets, así la recibes toda de una. Por cierto deberías usar también fgets en vez de gets (el archivo a usar es stdin).
¿por qué sumas x al contador? Si contador es un contador ¿que deberías sumar? Y ¿por qué haces cálculos parciales de la media? Es perder ciclos de cómputo cuando solo necesitas el resultado final.