O algoritmo funciona , mas não consigo implementar/pensar em como coloco essa saída EOF pedida no exercício , será que alguém poderia me dar uma ajuda?
Segue o problema
Depois de um belo dia de aula é função das vans levarem os estudantes para suas respectivas casas. Mas o que muitos não sabem é que além dos gastos e manutenção da van o motorista precisa ter uma rota para entregar os passageiros em suas casas. Como você é o menino(a) da informática, ele pediu sua ajuda para desenvolver essa rota ordenando os alunos pela distância(da menor para a maior), pela região (em ordem alfabética) e por último pelo nome.
Entrada
Ele te dá a quantidade Q de alunos que não faltaram, o nome do aluno A e uma sigla para a região onde ele mora S (“L” Leste, “N” Norte, “O” Oeste, “S” Sul), e C que representa o custo da entrada da cidade até sua casa. A saída dos casos será (EOF).
https://www.urionlinejudge.com.br/judge/pt/problems/view/2693 -> link para a questão
Implementação :
#include <stdio.h>
#include<string.h>
#define Tam 1000
typedef struct Aluno{
char nome[30];
char sigla[1];
int dist;
} aluno;
void insertion_nome(aluno v[Tam],int tam,aluno a,aluno b){
aluno aux;
int i;
for(i=0;i<tam;i++){
if(strcmp(a.sigla , v[i].sigla) ==0 && strcmp(a.nome , v[i].nome)==0 && a.dist == v[i].dist) {
break;
}
}
if(strcmp(a.nome ,b.nome)>0){
aux=a;
v[i]=b;
v[i+1]=aux;
}
}
void insertion_sigla(aluno v[Tam],int tam ,aluno a,aluno b){
aluno aux;
int i;
for(i=0;i<tam;i++){
if(strcmp(a.sigla , v[i].sigla) ==0 && strcmp(a.nome , v[i].nome)==0 && a.dist == v[i].dist) {
break;
}
}
if(strcmp(a.sigla ,b.sigla)>0){
aux=a;
v[i]=b;
v[i+1]=aux;
}
else if(strcmp(a.sigla ,b.sigla)==0){
insertion_nome(v,tam,a,b);
}
}
void insertion_dist(aluno v[Tam],int tam){
aluno aux;
int i,j;
for(i = 1; i<tam ; i++){
aux = v[i];
if(v[i-1].dist != aux.dist){
for (j = i-1; j >=0 && v[j].dist > aux.dist; j-- ){
v[j+1]= v[j];
v[j]=aux;
}
}
else{
insertion_sigla(v,tam,v[i-1],aux);
}
}
}
int main(){
aluno x[Tam];
int n_faltaram,i;
printf("Quantos alunos nao faltaram ?");
scanf("%d", &n_faltaram);
/*if(n_faltaram != EOF){ parte do EOF , como disse não sei se isso está correto
putc (n_faltaram, stdout);
}
else{
printf ("\nO arquivo terminou!");
} */
for (i = 0; i < n_faltaram; i++){
printf("Nome do aluno: \n");
setbuf(stdin, NULL);
scanf("%s", x[i].nome);
printf("Sigla: \n");
setbuf(stdin, NULL);
scanf("%s", x[i].sigla);
printf("Distancia: \n");
scanf("%d", &x[i].dist);
}
insertion_dist(x, n_faltaram);
for (i = 0; i < n_faltaram; i++){
printf("\n%s",x[i].nome);
}
return 0;
}