I'm using static type list, and when I try to display it, it shows only the first student of the registered.
#include <stdio.h>
#include <stdlib.h>
#define MAX 12
typedef struct Alunos alunos;
typedef struct Lista lista;
struct Alunos {
char nome[40];
int idade;
};
struct Lista {
int qnt;
alunos dados[MAX];
};
lista* cria(){
lista *l = malloc(sizeof(lista));
if(l != NULL)
l->qnt = 0;
return l;
}
int insere(lista *l, alunos al) { //insere no inicio
if(l == NULL)
return 0;
if(l->qnt == MAX)
return 0;
for(int i=0; i<l->qnt - 1; i++)
l->dados[i] = l->dados[i + 1];
l->dados[0] = al;
l->qnt++;
return 1;
}
void liberar(lista *l) {
free(l);
}
void exibe(lista *l) {
if(l->qnt == 0)
printf("\nLista esta vazia.\n\n");
for(int i=0; i<l->qnt; i++) {
printf("Aluno: %s", l->dados[i].nome);
printf(", de Idade: %d\n", l->dados[i].idade);
}
}
void menu(int opcao, lista *l, alunos al) {
do{
printf("\tEscolha uma Opcao\n");
printf("O: sair\n");
printf("1: Cadastrar Aluno\n");
printf("2: Exibir Alunos\n");
printf("Opcao: ");
scanf("%d", &opcao);
switch(opcao) {
case 0:
break;
case 1:
printf("\nDigite o nome: ");
scanf("%s", &al.nome);
printf("Digite a idade: ");
scanf("%d", &al.idade);
insere(l, al);
system("cls");
break;
case 2:
exibe(l);
break;
default:
printf("Opcao Invalida.\n");
break;
}
} while(opcao != 0);
liberar(l);
}
int main()
{
lista *l = cria();
alunos al;
int opc;
menu(opc, l, al);
return 0;
}