Olá. Estou tentando implementar este código com estrutura de dados, porém o compilador GCC 4.7 diz que há operandos inválidos. Dei uma pesquisada aqui no fórum e descobri que este pode ser um erro em que não está se fazendo a operação com o valor do vetores. Não consigo entender o porque ele não está passando os valores. Alguém pode me ajudar?
Os erros acontecem nas linhas: 146:27 , 151:27, 164:30, 176:21, 188:21
#include<stdio.h>
#include<stdlib.h>
#define ALUNOS 15
#define MEDIA 7.0
#define TAMANHO 80 //Tamanho do nome dos alunos
typedef struct {
char *nomeAluno;
double notas1[ALUNOS];
double notas2[ALUNOS];
int matricula[ALUNOS];
}Cadastro;
...
Cadastro *nome(int tamanho)
{
Cadastro *ptr;
int i;
if(!(ptr=malloc(tamanho*sizeof(Cadastro)))){
printf("Sem memória\n");
exit(1);
}
for(i=0;i<tamanho;i++){
ptr[i].nomeAluno=malloc(TAMANHO);
}
return ptr;
}
//Função que recebe informações e as armazena em um vetor.
void recebe_informacoes_alunos(Cadastro *cad)
{
int i;
for(i=0;i<ALUNOS;i++){
printf("\n");
// printf("Entre com o nome do aluno: \t");
// scanf("%s",cad.nomeAluno[i]);
printf("Entre com a matrícula do %dº aluno:\t ",i+1);
scanf("%d",&cad[i].matricula);
printf("Entre com a nota da primeira avaliação:\t ");
scanf("%lf",&cad[i].notas1);
/* while((cad[i].notas1>10.0)||(cad[i].notas1<0.0)){
printf("Valor informado está incorreto! A nota vai de 0 a 10.\n");
printf("Insira a nota novamente:\t");
scanf("%lf",&cad[i].notas1);
}*/
printf("Entre com a nota da segunda avaliação:\t ");
scanf("%lf",&cad[i].notas2);
/* while((cad[i].notas2>10.0)||(cad[i].notas2<0.0)){
printf("O valor informado está incorreto! A nota vai de 0 a 10.\n");
printf("Insira a nota novamente:\t");
scanf("%lf",&cad[i].notas2);
}*/
}
system("clear");
}
//Calcula a média de cada avaliação.
double calcula_media_turma(Cadastro *cad, double avaliacao)
{
int i;
if(avaliacao==2){
avaliacao=0; //Média para avaliação 1
for(i=0;i<ALUNOS;i++){
avaliacao=cad[i].notas1+avaliacao;
}
}else{
avaliacao=0; //Média para avaliação 2
for(i=0;i<ALUNOS;i++){
avaliacao=cad[i].notas2+avaliacao;
}
}
return avaliacao=(avaliacao/ALUNOS);
}
//Calcula a média de cada aluno.
void lista_media_final_alunos(Cadastro *cad)
{
int i;
double mediafinal;
for(i=0;i<ALUNOS;i++){
mediafinal=((cad[i].notas1+cad[i].notas2)/2);
printf("A média do aluno %d é: \t%.1lf",cad[i].matricula,mediafinal);
printf("\n");
}
}
//Lista os alunos aprovados.
void lista_alunos_aprovados(Cadastro *cad)
{
int i;
for(i=0;i<ALUNOS;i++){
if((cad[i].notas1+cad[i].notas2)/2>=MEDIA){
printf("O aluno de matrícula %d está aprovado.\n",cad[i].matricula);
}
}
}
//Lista os alunos em exame.
void lista_alunos_exame(Cadastro *cad)
{
int i;
for(i=0;i<ALUNOS;i++){
if((cad[i].notas1+cad[i].notas2)/2<MEDIA){
printf("O aluno de matrícula %d está em exame.\n",cad[i].matricula);
}
}
}
void libera(Cadastro *cad, int tam)
{
int i;
for(i=0;i<tam;i++){
free(cad[i].nomeAluno);
}
free(cad);
}
.
Já descobri!
Eram os vetores da struct que estava dando erro. Só retirei-os e foi corrigido.
Como foi feita a alocação lá embaixo não precisava estes vetores.
Pergunta
X4B
Olá. Estou tentando implementar este código com estrutura de dados, porém o compilador GCC 4.7 diz que há operandos inválidos. Dei uma pesquisada aqui no fórum e descobri que este pode ser um erro em que não está se fazendo a operação com o valor do vetores. Não consigo entender o porque ele não está passando os valores. Alguém pode me ajudar?
Os erros acontecem nas linhas: 146:27 , 151:27, 164:30, 176:21, 188:21
.
Já descobri!
Eram os vetores da struct que estava dando erro. Só retirei-os e foi corrigido.
Como foi feita a alocação lá embaixo não precisava estes vetores.
Editado por X4BLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.