I'm having a hard time understanding the passing by reference of a vector of structures. There is no running error, but I'm not sure if I'm reading the file right there.
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define NUM_MAX_ALUNOS 120
#define MAX_NOME_ALUNO 100
/*
SÍNTESE
OBJETIVO: Fazer o controle das médias finais de alunos de uma discplina
ENTRADA: Numero da matricula, nota da primeira prova, nota da segunda prova e nome do aluno
SAÍDA: Arquivo gravado com alunos que comecem com as letras A a M, e outro com o restante dos alunos, cabeçalho
na primeira linha do arquivo(que identifique cada coluna na tabela) e na última linha do arquivo o númer de estudantes, mensagem
se matrícula inválida,
mensagem se matrícula repetida, mensagem se nota inválida, mensagem se nome inválido
(gravados num arquivo erros.txt informando o número da linha onde o erro foi detectado, o conteúdo da linha e a descrição do erro)
Se existir pelo menos uma linha com erro, o usuário deve ser avisado e o programa encerrado
*Os nomes do 2 arquivos de saída
- Dados ordenados segundo nomes de alunos de A a M
- E dados com nomes dos alunos restantes dos alunos
- Arquivo com dados gravados dos erros (log)
*Entrada
Dados para leitura gravados em arquivo
*/
struct Disciplina{
int matricula;
float nota1, nota2;
char nomeAluno[MAX_NOME_ALUNO];
};
void zerarEstrutura(struct Disciplina* disciplina);
void lerDadosArqEntrada(struct Disciplina* disciplina);
void ValidarDadosArqEntrada();
void OrdenarDadosAlunos();
void GravarDadosArqSaida();
int main(int argc, char *argv[]) {
//declara o vetor de structs
struct Disciplina disciplina[NUM_MAX_ALUNOS];
zerarEstrutura(disciplina);
lerDadosArqEntrada(disciplina);
return 0;
}
void lerDadosArqEntrada(struct Disciplina * disciplina){
FILE * arq;
arq = fopen("dados_entrada.txt", "r");
int i=0;
if(arq == NULL){
printf("\nOcorreu um erro! O arquivo deve existir!");
exit(1);
}
else{
for(i=0; i<NUM_MAX_ALUNOS; i++){
while(fscanf(arq, "%d %f %f %[^\n]s\n", &(disciplina+i)-matricula, &(disciplina+i)->nota1,
&(disciplina+i)->nota2, (disciplina+i)->nomeAluno)!=EOF){
printf("Matricula: %d\nNota1: %f\nNota2: %f\nNome Aluno: %s", disciplina->matricula, disciplina->nota1, disciplina->nota2,
disciplina->nomeAluno);
}
}
fclose(arq);
}
}
void zerarEstrutura(struct Disciplina* disciplina){
int i=0;
for(i=0;i<NUM_MAX_ALUNOS;i++){
(disciplina+i)->matricula = 0;
strcpy((disciplina+i)->nomeAluno, "");
(disciplina+i)->nota1 = 0;
(disciplina+i)->nota2 = 0;
}
}