Se deben inicializar las variables al crear una estructura?, si a x,y les doy el valor de cero el compilador me da error, hay algun problema si no inicializo el arreglo nombre y las variables enteras?
A ver, si por inicializarlas te refieres a algo tal que:
typedef struct coordinate
{
char nombre[15];
int x = 0,y = 0;
}coordinate;
Pues no va a funcionar porque ahí estás definiendo el formato de la estructura, pero no estás reservando memoria para su uso.
Sin embargo cuando sí puedes inicializarla es una vez hayas creado alguna instancia de dicha estructura:
void func( )
{
coordinate estructura;
*estructura.nombre = 0;
estructura.x= 0;
estructura.y= 0;
// ...
}
Los beneficios de inicializar las variables es que así garantizas que tienen valores válidos... esto es especialmente importante con punteros.
La sentencia typedef esta bien dentro de main? o debo declarar la estructura fuera como prototipo?
Lo lógico y normal es declarar las estructuras fuera de las funciones, de esta forma puedes utilizar dicha estructura desde cualquier parte del código simplemente poniendo el include correspondiente.
Además poniendo las estructuras fuera de las funciones consigues un código más legible.