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);
}
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Recuperar arquivos de HD em formato RAW usando Linux (0)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta