Boa tarde! Esse é o meu primeiro post aqui, então me desculpem por qualquer erro.
Eu estou tentando fazer um programa em C para cadastro de alunos.
Basicamente ele precisa cadastrar quantos alunos o usuário quiser (máximo 50) e cada aluno possui uma chave (identificação) e três notas (n1, n2, n3).
Até o cadastro, parece que deu tudo certo, mas ocorre um erro estranho quando tento apresentar os alunos.
O código é o seguinte:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <malloc.h>
#define MAX 50
//Estrutura de Alunos
typedef struct{
int chave;
int n1;
int n2;
int n3;
}ALUNO;
//Lista dinâmica
typedef struct{
ALUNO A[MAX];
int qtdAlunos;
}LISTA;
//Função para iniciar lista
void inicia_sistema(LISTA* li){
li->qtdAlunos = 0;
printf("\n\nSistema Iniciado!\nVocê tem %d alunos cadastrados.\n--------------------------------------\n\n", li->qtdAlunos);
}
//Função para cadastrar alunos
int cadastra_aluno(LISTA* li, ALUNO al){
int i = li->qtdAlunos;
if(li->qtdAlunos == 0){
li->A[0] = al;
return 1;
}else{
i++;
li->A[i] = al;
return 1;
}
return 0;
}
//Função para listar alunos
void lista_aluno(LISTA* li){
int i;
for (i=0; i < li->qtdAlunos; i++){
printf("Aluno %d\n", i);
printf("Nota 1: %i\n", li->A[i].n1);
printf("Nota 2: %i\n", li->A[i].n2);
printf("Nota 3: %i\n\n\n", li->A[i].n3);
}
}
int main(){
setlocale(LC_ALL, "Portuguese");
LISTA* li = (LISTA*) malloc(sizeof(LISTA));
ALUNO al[MAX];
int op, cont, result;
do{
printf("Pressione para escolher:\n");
printf("1 - Iniciar Sistema\n");
printf("2 - Cadastrar Aluno\n");
printf("3 - Listar Alunos\n");
printf("0 - Sair\n");
scanf("%d", &op);
switch(op){
case 1:
inicia_sistema(li);
break;
case 2:
system("cls");
printf("Cadastro de Alunos\n\n--------------------------------------\n\n");
printf("Você tem %d alunos cadastrados.\n", li->qtdAlunos);
printf("Nota 1: ");
scanf("%d", &al[li->qtdAlunos].n1);
printf("Nota 2: ");
scanf("%d", &al[li->qtdAlunos].n2);
printf("Nota 3: ");
scanf("%d", &al[li->qtdAlunos].n3);
al[li->qtdAlunos].chave = li->qtdAlunos;
result = cadastra_aluno(li, al[li->qtdAlunos]);
li->qtdAlunos++;
if(result > 0){
printf("Aluno cadastrado!\n");
printf("Você tem %d alunos cadastrados.\n\n", li->qtdAlunos);
}else{
printf("Aluno não cadastrado!\n");
printf("Você tem %d alunos cadastrados.\n\n", li->qtdAlunos);
}
break;
case 3:
system("cls");
printf("Listar Alunos\n\n--------------------------------------\n\n");
lista_aluno(li);
break;
}
}while(op!=0);
}
A saída, para um caso de 3 alunos cadastrados, está em anexo.