Ir ao conteúdo
  • Cadastre-se

Dúvida exercício em C


Wesley B.

Posts recomendados

Olá pessoal, estou criando este tópico para saber se algum de vocês podem me auxiliar no seguinte problema.

Estou iniciando agora em Estruturas e em meio a um dos exercício me deparei com um problema: Após compilar (sem erros ou warnings) o código, fui executá-lo, porém já de início o programa pula o gets() (mesmo eu colocando o fflush(stdin)) e depois acaba dando crash. Não consigo encontrar o problema no código, portanto gostaria que alguém me auxiliasse. Segue o código:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

typedef struct
{
char nome[50];
long int matricula;
float nota;
} Taluno;

int main()
{
setlocale(LC_ALL, "");
Taluno *aluno;
int i, n, maior, menor;
float soma = 0;

printf("Digite a quantidade de alunos: ");
scanf("%d", &n);

aluno = (Taluno *)malloc(n * sizeof(Taluno));
if(aluno = NULL){
printf("Memória insuficiente!");
return -1;
}
for(i=0;i<n;i++){
printf("Digite o nome do %dº aluno: ", i+1);
fflush(stdin);
gets(aluno[i].nome);
printf("Digite a matrícula deste aluno: ");
scanf("%li", &aluno[i].matricula);
printf("Digite a nota deste aluno: ");
scanf("%f", &aluno[i].nota);
soma += aluno[i].nota;
if(i==0){
maior = i;
menor = i;
continue;
}
if(aluno[i].nota > aluno[maior].nota){
maior = i;
}
else{
if(aluno[i].nota < aluno[menor].nota)
menor = i;
}
printf("\n");
}

printf("\nO melhor aluno da sala é o %s(%li) que obteve nota %f\nO pior aluno da sala é o %s(%li) que obteve nota %f\nA média da turma foi de %f pontos.\n\n", aluno[maior].nome, aluno[maior].matricula, aluno[maior].nota, aluno[menor].nome, aluno[menor].matricula, aluno[menor].nota, (float)soma / n);
free(aluno);
system("PAUSE");
return 0;
}

Estou utilizando o Code::Blocks como IDE, e o objetivo do código é imprimir o melhor e o pior aluno da sala, e também a média da sala.

-------------------------------------------------------------------------------------

Hm, acabei de encontrar o erro. O erro se encontra no momento em que verifica se a alocação dinâmica foi feita com sucesso (if(aluno = NULL)), o correto seria if(aluno == NULL).

Não consegui deletar o tópico, então desculpem o incômodo. :wacko:

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...