Tipo, eu tentei alocar a memória pra minha struct
Ela tá declarada como Alunos A[TAM] (tam é o tamanho do vetor da struct)
ai quando vou alocar a memória pra ela usando struct Alunos *A =malloc(TAM*sizeof(struct Alunos));
ela não lê mais os dados do arquivo alunos.txt
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <time.h>
#define TAM 116
typedef struct Alunos{
char nome[50];
int matricula;
float notas[3];
float media;
}Alunos;
struct Alunos A[TAM];
//FUNÇÕES
void imprimir_aluno(int i){
printf("Aluno %d: %s\n",(i+1),A[i].nome);
}
void imprimir_notas(int i){
printf("Notas finais: %0.1f, %0.1f, %0.1f\n",A[i].notas[0],A[i].notas[1],A[i].notas[2]);
}
void imprimir_matricula(int i){
printf("Matricula: %d\n",A[i].matricula);
}
float media;
void imprimir_media(int i){
media=(A[i].notas[0]+A[i].notas[1]+A[i].notas[2])/3.0;
printf("Media do aluno: %0.1f\n",media);
}
void swap(Alunos *x,Alunos *y){
struct Alunos tmp = *x;
*x =*y;
*y = tmp;
}
void Bubble_sort(Alunos *A, int n){
int i, j;
for (i = (n - 1); i > 0; i--) {
for (j = 0; j < i; j++) {
if (A[j].matricula > A[j + 1].matricula) {
swap(&A[j], &A[j + 1]);
}
}
}
}
int buscador;
Alunos BuscarAluno(int buscador,Alunos A[TAM]){
Alunos a;
int c=2;
for(int i=0; i<TAM;i++){
if(buscador==A[i].matricula){
a=A[i];
c=2;
return a;
break;
}
c = 1;
}
if(c != 2){
a.matricula = -1;
return a;
}
}
int main(){
FILE *arqalunos;
if((arqalunos=fopen("alunos.txt","r+"))==NULL){
printf("não foi possível abrir o arquivo.");
system("pause");
exit(1);
}
struct Alunos *A =malloc(TAM*sizeof(struct Alunos));
if(A)
if(arqalunos!=NULL){
for(int i=0;i<TAM;i++){
fscanf(arqalunos,"%d",&A[i].matricula);
fscanf(arqalunos,"%s",&A[i].nome);
fscanf(arqalunos,"%f",&A[i].notas[0]);
fscanf(arqalunos,"%f",&A[i].notas[1]);
fscanf(arqalunos,"%f",&A[i].notas[2]);
}
}
int entrada,i,j;
int busca;
printf("Digite o numero de acordo com a opcao para imprimir:\n\n");
printf("1- Elementos\n");
printf("2- Nomes dos alunos\n");
printf("3- Nome dos alunos e suas notas finais\n");
printf("4- Buscar os dados de um aluno\n");
printf("5- Alunos ordenados de acordo com a matricula\n");
printf("6- Editar as notas do aluno (necessario busca)\n");
printf("7- Matricula, nome e maior nota da turma\n");
printf("8- Matricula, nome e menor nota da turma\n");
printf("9- Alunos aprovados, reprovados e media geral da turma\n");
printf("0- Sair do programa\n\n");
do{
scanf("%d",&entrada);
setbuf(stdin,NULL);
fflush(stdin);
switch(entrada){
case 1:
for(i=0;i<TAM;i++){
imprimir_aluno(i);
imprimir_matricula(i);
imprimir_notas(i);
imprimir_media(i);
printf("\n");
}
printf("\n");
break;
case 2:
for(i=0;i<TAM;i++){
imprimir_aluno(i);
printf("\n");
}
printf("\n");
break;
case 3:
for(i=0;i<TAM;i++){
imprimir_aluno(i);
imprimir_notas(i);
imprimir_media(i);
printf("\n");
}
printf("\n");
break;
case 4:/*
Struct
printf("Digite o numero de Matricula:\n");
scanf("%d",&buscador);
a = BuscarAluno(buscador,A);
if(A->matricula != -1){
imprimir_aluno(i);
imprimir_matricula(i);
imprimir_notas(i);
imprimir_media(i);
}else{
printf("Matricula não foi encontrada\n");
}*/
break;
case 5:
for(i=0;i<TAM;i++){
Bubble_sort(A, TAM);
imprimir_aluno(i);
imprimir_matricula(i);
printf("\n");
}
printf("\n");
break;
case 6:
printf("oil");
break;
}
}while(entrada!=0);
printf("Programa finalizado!");
free(A);
return 0;
}
alunos.txt