Ir para conteúdo
Fórum Script Brasil
  • 0

Vetor Lista Dinâmica


AlissonCiprian0

Pergunta

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.

 

1.png

2.png

3.png

4.png

5.png

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...