Otimizei o programa. Ele está fazendo tudo corretamente, o problema é que como eu fiz a função insert retornar um tipo "Aluno", daí só consigo imprimir os dados de apenas um aluno, que é aquele que eu determino dentro insert, e não de todos, como é o objetivo. Agora a minha dúvida é como imprimir: Alguém sabe como consigo imprimir todos os alunos? #include<stdio.h>
#include<string.h>
# define n 5
/*criaçao do struct Aluno*/
typedef struct aluno
{
char nome [n];
int mat;
float cr;
}Aluno;
/* Funçao que vai ordenar crescentemente os CR's e imprimir os dados dos alunos já ordenados*/
void imprime(struct aluno tab[n])
{
int k;
printf("Informações dos alunos: \n");
for (k=0;k<n;k++);
{
printf ("\nNome: %s \nMatrícula: %d \nCR: %.2f \n",tab[k].nome, tab[k].mat, tab[k].cr);
}
printf("\n\n");
}
Aluno insert(struct aluno tab[n])
{
Aluno aux; // vi essa atribuição aqui no fórum, mas não consegui usar.
int i, j, k;
for(i=1;i<n;i++)
{
strcpy(aux.nome,tab[i].nome);
aux.mat=tab[i].mat;
aux.cr=tab[i].cr;
for(j=i-1;j>=0 && tab[j].cr > aux.cr;j--)
{
strcpy(tab[j+1].nome,tab[j].nome);
tab[j+1].mat=tab[j].mat;
tab[j+1].cr=tab[j].cr;
}
strcpy(tab[j+1].nome,aux.nome);
tab[j+1].mat=aux.mat;
tab[j+1].cr=aux.cr;
}
return (tab[3]); // só imprime esse cara
}
int main ()
{
# define n 5
int i, k;
Aluno tab[n], tab2[n];
/*entrada de dados*/
for (i=0;i < n; i++)
{
printf("Digite o nome do %d° aluno: ", i+1);
scanf("%s", tab[i].nome);
printf("Digite a matrícula do %d° aluno: ", i+1);
scanf("%d", &tab[i].mat);
printf("Digite o CR do %d° aluno: ", i+1);
scanf("%f", &tab[i].cr);
}
for (i=0;i < n; i++) // Só para testar se o vetor está armazenando corretamente os dados.
{
printf("\nNome: %s \nMatrícula: %d\n CR: %.2f\n",tab[i].nome, tab[i].mat, tab[i].cr);
}
tab2 [n] = insert (tab); // chama insert. Só recebe um aluno para imprimir.
printf("Informações dos alunos: \n");
for (k=0;k<n;k++);
{
printf ("\nNome: %s \nMatrícula: %d \nCR: %.2f \n",tab2[k].nome, tab2[k].mat, tab2[k].cr);
}
printf("\n\n");
return 0;
}