O programa abaixo mostra um claro exemplo de como criar e declarar structs aninhadas,
Criei algumas estruturas, sendo duas aninhadas, más para não crescer muito o tópico,me calo aos comentários, ficando por conta dos interessados procurar entender como tudo foi feito.
Eis algumas imagens do Programa em Execução:
#include <stdio.h>
#include <string.h>
#include <conio.h>
void got_color ( int tam_lin_ini , int tam_lin_fim , int tam_ini_col ,
int tam_fim_col , int a , int b ) {
int i, e;
if ( a >= 1 && a <= 16 ) {
textcolor ( a );
}
if ( b >= 1 && b <= 16 ) {
textbackground ( b );
}
for ( i = tam_lin_ini; i < tam_lin_fim ; i++ ) {
for ( e = tam_ini_col; e < tam_fim_col ; e++ ) {
gotoxy ( e , i );
printf ( " " );
}
}
}
struct Diretor {
char Dire_tor [ 85 ];
} Diretor_De_Escola [ 48 ] = {
{"Um Diretor de
Escola da rede Estadual de ensino" },
{"listou seus
10 melhores alunos" },
{"Pressione
qualquer tecla para conhece - los" } };
struct Escola {
char nome [ 16 ];
};
struct Escola Alu_no [ 16 ] =
{{ "Ana Celia " }, { "Eder Costa " },
{ "Humberto Gomes " }, { "Dijalma
Lacerda" },
{ "Caroline Silva " }, { "Igor
Goncalves " },
{ "Bruna Carla "
}, { "Fabio
Quadros " },
{ "Geany Barros "
}, { "Jaqueline
Vega "}};
struct End_Da_Escola {
int Numero;
int Total_de_Alunos;
};
struct Professor {
float Idade_Do_Professor;
float Idade_Do_Diretor;
};
struct Classe {
float Idade;
float Notas;
int Chamada;
struct End_Da_Escola Atual;
char Nome_da_rua [ 30 ];
struct Professor Profe_ssor;
char Nome_Do_Professor [ 30 ];
char Nome_Do_Diretor [ 30 ];
};
struct Classe End_Da_Escola;
struct Classe Professor;
int main ( ) {
system ( "title PROGRAMA STRUCT ANINHADA" );
int i;
struct Classe Notas_Idades [ 10 ] = { { 20.4, 9.5, 1 }, { 18.6, 8.9, 5 }, {
16.5, 6.4, 8 }, { 19.4, 7.5, 4 }, { 17.5, 8.0, 3 },
{ 17.0, 7.7, 9 }, { 19.7, 6.9, 2 }, { 18.6, 9.0, 6 },
{ 16.0, 9.9, 7 }, { 20.0, 8.5, 10 } };
strcpy ( Professor.Nome_Do_Professor , "Inacio
Santana" );
strcpy ( Professor.Nome_Do_Diretor , "Juvencio
Guimaraes" );
Professor.Profe_ssor.Idade_Do_Professor = 40.5;
Professor.Profe_ssor.Idade_Do_Diretor = 55.6;
strcpy ( End_Da_Escola.Nome_da_rua , "Presidente
General Figueiredo" );
End_Da_Escola.Atual.Numero = 335;
End_Da_Escola.Atual.Total_de_Alunos = 1200;
got_color ( 2 , 25 , 3 , 79 , 2 , 15 ); //Moldura
textcolor ( VERMELHOCLARO );
gotoxy ( 30 , 3 );
printf ( "PROGRAMA STRUCT ANINHADA" );
textcolor ( PRETO );
gotoxy ( 24 , 5 );
printf ( "Programa
desenvolvido por:" );
textcolor ( CINZAESCURO );
gotoxy ( 51 , 5 );
printf ( "Samuel
Lima" );
textcolor ( VERDECLARO );
gotoxy ( 34 , 7 );
printf ( "sa_sp10@hotmail.com" );
for ( i = 0; i < 2 ; i++ ) {
gotoxy ( 17 , i + 7 );
textcolor ( AZULCLARO );
if ( i == 48 ) {
gotoxy ( 17 , 9 );
}
printf ( " %s " , Diretor_De_Escola [ i ].Dire_tor );
textcolor ( VERMELHOCLARO );
gotoxy ( 20 , 17 );
printf ( " %s " , Diretor_De_Escola [ 2 ].Dire_tor );
}
getche ( );
system ( "cls" );
got_color ( 2 , 25 , 3 , 79 , 2 , 11 );
textcolor ( VERMELHOCLARO );
gotoxy ( 30 , 3 );
printf ( "PROGRAMA
STRUCT ANINHADA" );
textcolor ( PRETO );
gotoxy ( 11 , 5 );
printf ( "Nomes Idades Notas Numeros" );
textcolor ( AZULCLARO );
for ( i = 0; i < 10 ; i++ ) {
gotoxy ( 4 , i + 7 );
printf ( " %s %.1f %.1f %d" ,
Alu_no [ i ].nome , Notas_Idades [ i ].Idade ,
Notas_Idades [ i ].Notas , Notas_Idades [ i ].Chamada );
}
Sleep ( 1800 );
textcolor ( VERMELHOCLARO );
gotoxy ( 30 , 23 );
printf ( "PRESSIONE
QUALQUER TECLA" );
getche ( );
system ( "cls" );
got_color ( 2 , 25 , 3 , 79 , 2 , 15 );
textcolor ( VERMELHOCLARO );
gotoxy ( 30 , 3 );
printf ( "PROGRAMA
STRUCT ANINHADA" );
textcolor ( AZULCLARO );
gotoxy ( 10 , 5 );
printf ( "Nome do
Professor ==> " );
textcolor ( VERMELHOCLARO );
gotoxy ( 40 , 5 );
printf ( "%s" , Professor.Nome_Do_Professor );
textcolor ( AZULCLARO );
gotoxy ( 10 , 7 );
printf ( "Nome do
Diretor ==> " );
textcolor ( VERMELHOCLARO );
gotoxy ( 40 , 7 );
printf ( "%s " , Professor.Nome_Do_Diretor );
textcolor ( AZULCLARO );
gotoxy ( 10 , 9 );
printf ( "A idade do
Professor ==> " );
textcolor ( VERMELHOCLARO );
gotoxy ( 40 , 9 );
printf ( "%.1f " , Professor.Profe_ssor.Idade_Do_Professor );
textcolor ( AZULCLARO );
gotoxy ( 10 , 11 );
printf ( "A idade do
Diretor ==> " );
textcolor ( VERMELHOCLARO );
gotoxy ( 40 , 11 );
printf ( "%.1f " , Professor.Profe_ssor.Idade_Do_Diretor );
textcolor ( AZULCLARO );
gotoxy ( 10 , 13 );
printf ( "Endereco da
Escola ==> " );
textcolor ( VERMELHOCLARO );
gotoxy ( 40 , 13 );
printf ( "Rua %s " , End_Da_Escola.Nome_da_rua );
textcolor ( AZULCLARO );
gotoxy ( 10 , 15 );
printf ( "NÚmero ==> " );
textcolor ( VERMELHOCLARO );
gotoxy ( 40 , 15 );
printf ( "%d " , End_Da_Escola.Atual.Numero );
textcolor ( AZULCLARO );
gotoxy ( 10 , 17 );
printf ( "Total de
Alunos ==> " );
textcolor ( VERMELHOCLARO );
gotoxy ( 40 , 17 );
printf ( "%d " , End_Da_Escola.Atual.Total_de_Alunos );
Sleep ( 1800 );
textcolor ( VERMELHOCLARO );
gotoxy ( 26 , 19 );
printf ( "Por: " );
textcolor ( AZULCLARO );
printf ( "Samuel
Lima" );
textcolor ( PRETO );
gotoxy ( 26 , 20 );
printf ( "sa_sp10@hotmail.com" );
Sleep ( 1800 );
textcolor ( VERMELHOCLARO );
gotoxy ( 37 , 23 );
printf ( "MUITO
OBRIGADO" );
getche ( );
exit ( 0 );
}