Enviado em 10/09/2015 - 09:56h
Estou com um problema com código usando structs, acho que tem algo muito errado na minha função de ler e validar uma nota.
// Aluno : Fernando Henrique Antero de Moraes
/*
Sintese
Objetivo: Auxiliar o usuário no cadastro de um aluno , suas 4 notas e calcular a média.
Entrada :nome do aluno, notas
Saida : nome do aluno, notas, media
*/
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define MAX_NOME 100
#define QTDE_NOTAS 4
struct Cadastro
{
char nome[MAX_NOME];
float notas[QTDE_NOTAS];
float media;
};
//////////////////////PROTÓTIPOS/////////////////////////////////////
void leValidaNota(struct Cadastro aluno, char *titulo, int contador);
void apresentaCadastro(struct Cadastro aluno, int qtdeNotas);
void calculaMedia(struct Cadastro aluno, int qtdeNotas);
void leValidaTexto (char *texto, char *mensagemTitulo, int tamanho);
///////////////////////////////////////////////////
int main(void){
// Declaracoes
char titulo[MAX_NOME];
int aux;
// Instrucoes
setlocale(LC_ALL,"Portuguese");
struct Cadastro aluno;
leValidaTexto(aluno.nome,"Informe o nome do estudante:",MAX_NOME);
for(aux=0;aux<QTDE_NOTAS;aux++){
leValidaNota(aluno,"Informe as notas do estudante:\n", aux);
}
calculaMedia(aluno, QTDE_NOTAS);
apresentaCadastro(aluno, QTDE_NOTAS);
getch();
return 0;
}
//Objetivo:ler e validar uma nota
//Parametros:
//Retorno:nota valida
void leValidaNota(struct Cadastro aluno, char *titulo, int contador)
{
int ret;
do{
printf("Informe a nota numero %d:\n",contador+1);
fflush(stdin);
ret=scanf("%f",&aluno.notas[contador]);
fflush(stdin);
if(aluno.notas[contador]<0||aluno.notas[contador]>10)
{
printf("Valor informado fora da faixa informe novamente: 0...10\n");
}
else if(ret==0)
{
printf("Campo destinado para numeros, informe novamente\n");
}
}while(aluno.notas[contador]<0||aluno.notas[contador]>10||ret==0);
}
// Objetivo: Ler e validar um texto
// Parâmetros: referencia ao vetor do texto, referencia ao vetor mensagem de titulo, valor maximo da string
// Retorno:
void leValidaTexto (char *texto, char *mensagemTitulo, int tamanho)
{
do{
printf("%s\n", mensagemTitulo);
fflush(stdin);
fgets(texto, tamanho, stdin);
fflush(stdin);
if(texto[strlen(texto)-1] == '\n'){
texto[strlen(texto)-1] = '\0';
}
if(strlen(texto) == 0){
system("cls");
printf("Nada foi informado\n");
getch();
}
}while(strlen(texto) == 0);
}
//Objetivo:calcular a media entre 4 valores
//Parametros:
//Retorno:
void calculaMedia(struct Cadastro aluno, int qtdeNotas)
{
float somaMedias;
int aux;
for(aux=0;aux<qtdeNotas;aux++){
somaMedias=aluno.notas[aux];
}
aluno.media=somaMedias/qtdeNotas;
}
//Objetivo:Apresentar os dados do aluno
//Parametros:
//Retorno:
void apresentaCadastro(struct Cadastro aluno, int qtdeNotas)
{
int aux;
printf("Aluno:%s\n",aluno.nome);
printf("Suas notas foram:\n");
for(aux=0;aux<qtdeNotas;aux++){
printf("%.2f\n",aluno.notas[aux]);
}
printf("A média do aluno foi %.2f:\n", aluno.media);
}
Customizar a Instalação do Linux Debian com Preseed
Atualizando o Passado: Linux no Lenovo G460 em 2025
aaPanel - Um Painel de Hospedagem Gratuito e Poderoso
Um modo leve de ouvir/ver áudio/vídeo da internet em máquinas pererecas
Resolver algumas mensagens de erro do SSH
Instalar módulo de segurança do Banco do Brasil Warsaw do tipo .run
Linux Debian 11 Bullseye Reiniciando Sozinho (2)
O que você está ouvindo agora? [2] (194)
Bora fazer um teste? mbti (12)
Possível Migração de windows para linux ???? (pc da empresa) (2)