Ir ao conteúdo
  • Cadastre-se
Diogo alves12

C Erro ao listar os alunos

Recommended Posts

Não estou conseguindo listar os alunos que eu cadastrei,não vejo onde está o erro,alguém pode me ajudar

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define max 50;
typedef struct
{
	char nome[50];
	float notas[4];
	int ativo;
} Aluno;

Aluno alunos[50];

void menu();
void cadastrar();
void remover();
void reprovados();
void pesquisar();
void listar();
int main(int argc, char** argv)
{
	menu();
	return 0;
}

void menu()
{
	int resp;
	do
	{
		system("cls");
		printf("1 cadastar \n2-remover aluno\n");
		printf("3-alunos reprovados\n4-pesquisa\n");
		printf("5-listar\n0 sair\n");
		scanf("%d", &resp);
		getchar();
		switch(resp)
		{
		case 1:
			cadastrar();
			break;
		case 5:

			listar();
			break;
		}
		getchar();
	}
	while(resp != 0);
}
void cadastrar()
{
	int op, i, j;
	system("cls");
	char nome[50];
	float notas[4];
	do
	{
		printf("digite um nome do aluno\n");
		fgets(nome, sizeof(nome), stdin);
		for(i = 0; i < 4; i++)
		{
			printf("%d Bimestre: ", i + 1);
			scanf("%f", &notas[i]);
		}
		for(j = 0; j < 50; j++)
		{
			if(alunos[i].ativo == 0)
			{
				alunos[i].notas[i] = notas[i];
				strcpy(alunos[i].nome, nome);
				alunos[i].ativo=1;
				break;
			}
		}
		printf("Digite 0 para sair\n");
		scanf("%d", &op);
	}
	while(op != 0);
}
void remover()
{

}
void reprovados()
{

}
void pesquisar()
{

}
void listar()
{
	int i;
	system("cls");
	printf("alunos cadastrados :\n");
	for(i = 0; i < 50; i++)
	{
		if(alunos[i].ativo == 1)
		{
			printf("Nome %s\n", alunos[i].nome);
			for(i = 0; i < 50; i++)
			{
				printf("%d Bimestre %f:\n",i+1,alunos[i].notas[i]);
			}
			printf("___________________\n");
		}
	}
	getchar();
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Diogo alves12    na hora de cadastrar você usou esse comando 

fgets(nome, sizeof(nome), stdin);

e você não clocou o typedef que você criou e seria melhor usar  o gets() assim 

fflush(stdin);
gets(alunos[contador].nome);

e as notas também, e esse contador é para saber em qual posição do vetor você está cadastrando .  ele precisa ser do tipo global para poder ser acessado de qualquer parte do programa, e a cada cadastro ele precisa ser incrementado para apontar para a próxima posição do vetor que receberá o novo cadastro .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não teria um erro de lógica do seu algoritmo? Se são 50 alunos e cada aluno tem 4 notas, creio que deveria fazer algo como o código abaixo, tanto pro cadastro como pra listagem:

            for(i = 0; i < 50; i++) //50 alunos
            {
                printf("Nome %s\n", alunos[i].nome);
                for(x = 0; x < 4; x++)//4 notas
                    printf("%d Bimestre %f:\n",i+1,alunos[i].notas[x]);
            }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×