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);
}
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Dica para encontrar diversos jogos Indies criativos
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Sincronização Horario Estação de trabalho máquinas domínio com samba N... (2)
Software livre - será que eu estou tão errado assim? (16)