Ir ao conteúdo

Posts recomendados

Postado

eu consegui até está parte, mas na hora de inserir os dados na struc dá  bug : não dá pra inserir as notas e consequentemente calcular as médias de cada aluno., além disso, estou com dificuldade em criar e usar as funções media(void) e mediaTurma(void).

o problema em questão quer cadastrar, mostrar exibir as medias acima de 7.

eis o código defeituoso em quase toda totalidade.

1-Inserir um aluno;
2 - Listar todos os nomes e as respectivas medias;
3 - Quantidade de alunos com media maior que 7;
4 - Média da turma;
0 - Finalizar programa;

obs : ainda não criei a condição para as notas > 7.

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void inserir(void);
void mostrar(void);
float media(void);
float mediaTurma(void);
int i;
struct registro
{
          float nota1,nota2,media,mediaTurma;
          char nome[30];
};
          
          struct registro vetor[10];
int num;
int main(void)
{
              for(; ;)
              {
              printf("\t\t\t\tCADASTRO DE ALUNOS\n");
              printf("1-Para adicionar aluno\n");
              printf("2-Para mostar nomes e medias\n");
              printf("3-medias maiores que 7\n");
              printf("0-  Sair\n");
              scanf("%d",&num);
              switch(num)
              {
              case 1: inserir();
              break;
              case 2: mostrar();
              break;
              case 0: exit(0);
              default: printf("TENTE NOVAMENTE");
              }                
               
}
getchar();           
}
                
void inserir (void)
{
                 for(i=0; i<10; i++)
                 {
                 printf("Entre com o nome do aluno e suas notas\n");
                 gets(vetor.nome);
                 fflush(stdin);
                 
                 scanf("%f%f",&vetor.nota1,&vetor.nota2);}
                 
                 
getche();
}
void mostrar(void)
{
int i;
          for(i=0; i<10; i++)
          {
          printf("\n Nome do aluno: %s",vetor.nome);
          printf("\n media do aluno: %f",vetor.media);
          }
}
float media(media){
    vetor.media=(vetor.nota1+vetor.nota2)/2;
    return media;
    
}
             

 

Postado

@gabrielleletice bom dia, segue abaixo, deixei comentado o que foi alterado.

 



#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> void inserir(void); void mostrar(void); void media(void); //float mediaTurma(void); int i; struct registro { float nota1, nota2, media, mediaTurma; char nome[30]; }; struct registro vetor[10]; int num; int main(void) { for (;;) { printf("\t\t\t\tCADASTRO DE ALUNOS\n"); printf("1-Para adicionar aluno\n"); printf("2-Para mostar nomes e medias\n"); printf("3-medias maiores que 7\n"); printf("0- Sair\n"); scanf("%d", &num); switch (num) { case 1: inserir(); break; case 2: mostrar(); break; case 0: exit(0); default: printf("TENTE NOVAMENTE"); } } getchar(); } void inserir(void) { for (i = 0; i < 10; i++) { printf("Entre com o nome do aluno e suas notas\n"); //gets(vetor.nome); //fflush(stdin); scanf(" %s %f %f", vetor[i].nome, &vetor[i].nota1, &vetor[i].nota2); //scanf("%f%f", &vetor.nota1, &vetor.nota2); } //getche(); } void mostrar(void) { media(); int i; for (i = 0; i < 10; i++) { printf("\n Nome do aluno: %s", vetor[i].nome); printf("\n media do aluno: %f\n", vetor[i].media); } } void media(void/*media*/) { for (i = 0; i < 10; i++) vetor[i].media = ((vetor[i].nota1 + vetor[i].nota2) / 2); /*return media;*/ }

  • Curtir 1
Postado
35 minutos atrás, Gustavo Andretto disse:

@gabrielleletice Aqui está funcionando

HfdCFW.jpg

 

você quer cadastrar apenas um por vez?

Sim, apenas um por vez.

pra ter sempre as opções do menu para escolher em qualquer momento..

pois fazendo assim, só posso ver as médias e notas ao final e não em qualquer momento

adicionado 0 minutos depois

@Gustavo Andretto

adicionado 18 minutos depois

@Gustavo Andretto

no meu sempre fica espaços a mais na hora de cadastrar, o que acaba bugando as opções..

além de não poder retornar ao menu depois de ter inserido o aluno

void.png

Postado

@gabrielleletice

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

void inserir(void);
void mostrar(void);
void media(void);
//float mediaTurma(void);

int i;
struct registro
{
	float nota1, nota2, media, mediaTurma;
	char nome[30];
};

struct registro vetor[10];
int num;
int main(void)
{
	for (;;)
	{
		printf("\t\t\t\tCADASTRO DE ALUNOS\n");
		printf("1-Para adicionar aluno\n");
		printf("2-Para mostar nomes e medias\n");
		printf("3-medias maiores que 7\n");
		printf("0-  Sair\n");
		scanf("%d", &num);

		switch (num)
		{
		case 1: inserir();
			break;
		case 2: mostrar();
			break;
		case 0: exit(0);
		default: printf("TENTE NOVAMENTE");
		}

	}

	getchar();
}

void inserir(void)
{
	for (i = 0; i < 10; i++)
	{
		// verifica se a posição está vazia
		if (strlen(vetor[i].nome) == 0) //***
		{
			printf("Entre com o nome do aluno e suas notas\n");
			scanf(" %s %f %f", vetor[i].nome, &vetor[i].nota1, &vetor[i].nota2);
			break; // volta para o menu
		}
	}

	//getche();
}

void mostrar(void)
{
	media();

	int i;
	for (i = 0; i < 10; i++)
	{
		// printa as posições que não estão vazias
		if (strlen(vetor[i].nome) != 0) //***
		{
			printf("\n Nome do aluno: %s", vetor[i].nome);
			printf("\n media do aluno: %f\n", vetor[i].media);
		}
		else
			break; // volta para o menu
	}
}

void media(void/*media*/)
{
	for (i = 0; i < 10; i++)
		vetor[i].media = ((vetor[i].nota1 + vetor[i].nota2) / 2);

	/*return media;*/
}

 

  • Curtir 1
Postado

@Relry PeSan pois é, eu pensei em usar também mas como ela não usou em seu código eu achei melhor não colocar.

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define REGISTRO_TAM 30

typedef struct registro
{
	char nome[30];
	float nota[2];
	float media;
} registro_t;

void mostrar_menu(void);
void inserir(registro_t*);
void mostrar(registro_t*);

int main(void)
{
	registro_t vetor[REGISTRO_TAM];
	memset(&vetor[0], 0, sizeof(vetor));

	while(1)
	{
		mostrar_menu();

		int num;
		scanf("%d", &num);

		switch (num)
		{
		case 1:
			inserir(&vetor[0]);
			break;
		case 2:
			mostrar(&vetor[0]);
			break;
		case 0:
			exit(0);
		default: printf("TENTE NOVAMENTE");
		}

	}

	return 0;
}

void mostrar_menu(void)
{
	printf("CADASTRO DE ALUNOS\n");
	printf("  1 - Para adicionar aluno\n");
	printf("  2 - Para mostar nomes e medias\n");
	printf("  3 - medias maiores que 7\n");
	printf("  0 - Sair\n");
}

void inserir(registro_t *vetor)
{
	for (int i = 0; i < REGISTRO_TAM; i++)
	{
		if (strlen(vetor[i].nome) == 0)
		{
			printf("Entre com o nome do aluno e suas notas\n");
			scanf(" %s %f %f", vetor[i].nome, &vetor[i].nota[0], &vetor[i].nota[1]);
			vetor[i].media = (vetor[i].nota[0] + vetor[i].nota[1]) / 2;
			break;
		}
	}
}

void mostrar(registro_t *vetor)
{
	for (int i = 0; i < REGISTRO_TAM; i++)
	{
		if (strlen(vetor[i].nome) != 0)
		{
			printf("\n Nome do aluno: %s", vetor[i].nome);
			printf("\n media do aluno: %f\n\n", vetor[i].media);
		}
		else break;
	}
}

 

  • Curtir 1
Postado

Muito bom, acredito que tudo foi resolvido, até tentei dar uma editada no código, mas acho que já tá otimizado o suficiente, segue minha edição, créditos APENAS de @Gustavo Andretto:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define REGISTRO_TAM 30

typedef struct registro
{
	char nome[30];
	float nota[2];
	float media;
} registro_t;


void mostrar_menu(void);
void inserir(registro_t*);
void mostrar(registro_t*, int);

int main(void)
{
	registro_t vetor[REGISTRO_TAM];
	memset(&vetor[0], NULL, sizeof(vetor));
	int num = 1;

	while(num)
	{	
		
		mostrar_menu();
		//int num; recriado a cada 'volta'
		scanf("%d", &num);

		switch (num)
		{
			case 1:
				inserir(&vetor[0]);
			   	break;
			case 2:
				mostrar(&vetor[0],2);
				break;
			case 3:
				mostrar(&vetor[0],3);
				break;
			case 0:
				break;
			default:
				printf("TENTE NOVAMENTE");
		}
	}

	return 0;
}

void mostrar_menu(void)
{
	fflush(stdin);
	printf("\nCADASTRO DE ALUNOS\n");
	printf("  1 - Para adicionar alunos\n");
	printf("  2 - Para mostar nomes e medias\n");
	printf("  3 - medias maiores que 7\n");
	printf("  0 - Sair\n");
}

void inserir(registro_t *vetor)
{
	for (int i = 0; i < REGISTRO_TAM; i++)
	{
		if (strlen(vetor[i].nome) == 0)
		{
			printf("Entre com o nome do aluno e suas notas\n");
			scanf(" %s %f %f", vetor[i].nome, &vetor[i].nota[0], &vetor[i].nota[1]);
			vetor[i].media = (vetor[i].nota[0] + vetor[i].nota[1]) / 2;
			break;
		}
	}
}

/* reutilizar função 
flag 2 = mostrar nomes e medias
flag 3 = mostrar medias maiores que 7 
*/
void mostrar(registro_t *vetor, int flag)
{
	printf("\n-------------\n");//para separar os resultados
	for (int i = 0; i < REGISTRO_TAM; i++)
	{
		if (strlen(vetor[i].nome) != 0)
		{
			if(flag == 2){
				printf("\n Nome do aluno(%i): %s",i, vetor[i].nome);
				printf("\n media do aluno: %.2f\n\n", vetor[i].media);
			} 
			else if(flag == 3 && vetor[i].media > 7){
				printf("Media do Aluno(%i): %f\n",i, vetor[i].media);
			} 
		}
		else break;
	}
	printf("-------------\n");
}

 

  • Curtir 2
Postado
6 horas atrás, vangodp disse:

exceto por fflush+stdin que é uma das coisas que não recomendo >_<. Existem outros meios para se fazer isso, não sei por que recomendam usar isso em livros.

Sim, você esta certo, mas algumas pessoas devem compreender uma função, antes de aperfeiçoa-la, se ninguém recomendasse fflush, ninguém saberia de sua existência, e não haveria tantas resoluções, é claro que não é tão recomendado para programadores avançados, já que só trocar de
scanf("%d", &num);

para

scanf(" %d", &num);

ja resolve o problema.

Visitante
Este tópico está impedido de receber 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!