no me quedo muy claro lo de estructuras anidadas, pero creo que te referis a lo siguiente:
    
Código C++:
Ver original- #include <stdio.h> 
-   
- struct persona{ 
-   
- char nombre[30]; 
- char apellido[30]; 
- }; 
-   
-   
- struct usuario{ 
-   
- char nickName[30]; 
- char password[30]; 
- persona datos; //datos es la variable de tipo persona, donde persona es el struct declarado anteriormente 
-   
- }; 
-   
- int main(){ 
-   
-   
- usuario ejemplo; 
-   
- //se completa con datos las variables dentro del struct interno 
- strcpy(- ejemplo. datos- . nombre, "NombreEjemplo");
 
- strcpy(- ejemplo. datos- . apellido, "ApellidoEjemplo");
 
-   
- //se completa con datos las variables de tipo primitivas del struct principal 
- strcpy(- ejemplo. nickName, "NickNameEjemplo");
 
- strcpy(- ejemplo. password, "PasswordEjemplo");
 
-   
- printf("%s",-  ejemplo. datos- . nombre);
 
- printf("%s",-  ejemplo. datos- . apellido);
 
- printf("%s",-  ejemplo. nickName);
 
- printf("%s",-  ejemplo. password);
 
-   
- return 0; 
- } 
Proba ese ejemplo y analizalo para ver como funciona. 
En cuanto al ejercicio que tenes que hacer, no es tan necesario usar structs anidados, se puede hacer con vectores