Olá sou novato aqui, criei esse programa mas estou com um problema. O código funciona mas gostaria que na função lerAluno a matricula sempre desse uma mensagem de erro ao se repetir o valor. No jeito que está, se você digitar a primeira e a segunda matriculas iguais da o aviso, mas se a terceira for igual a primeira o programa aceita ela.
#include<stdio.h>
typedef struct Aluno
{
int matricula[5];
float nota1[5];
float nota2[5];
float somamedia[5];
}Aluno;
void lerAluno (Aluno *p);
void ordena (Aluno *v);
void imprimi (Aluno *b);
int main()
{
Aluno a;
lerAluno(&a);
ordena(&a);
imprimi(&a);
return 0;
}
void lerAluno (Aluno *p)
{
int i;
printf("Matricula: "
scanf("%d",&(p->matricula[0]));
printf("Nota1: "
scanf("%f",&(p->nota1[0]));
printf("Nota2: "
scanf("%f",&(p->nota2[0]));
printf("\n"
p->somamedia[0] = p->nota1[0] + p->nota2[0];
for(i=1;i<=4;i++)
{
printf("Matricula: "
scanf("%d",&(p->matricula[i]));
while(p->matricula[i] == p->matricula[i-1])
{
printf("\n ERRO - MATRICULA JA CONSTA NO SISTEMA!\n\n"
printf("Nova Matricula: "
scanf("%d",&(p->matricula[i]));
}
printf("Nota1: "
scanf("%f",&(p->nota1[i]));
printf("Nota2: "
scanf("%f",&(p->nota2[i]));
printf("\n"
p->somamedia[i] = p->nota1[i] + p->nota2[i];
}
}
void ordena( Aluno *v )
{
int i ,j,aux;
for(i=0; i < 4; i++)
{
for(j=i; j < 4 ; j++)
{
if (v->matricula[i] >= v->matricula[j])
{
aux = v->matricula[i];
v->matricula[i] = v->matricula[j];
v->matricula[j] = aux;
}
}
}
}
void imprimi(Aluno *b)
{
int i;
for(i=0;i<4;i++)
{
printf("\n-------------------------------------------------------------\n"
printf("Matricula: %d\n",b->matricula[i]);
printf("Nota1: %1.2f\n",b->nota1[i]);
printf("Nota2: %1.2f\n",b->nota2[i]);
printf("Media do Aluno: %1.2f\n",b->somamedia[i]/2);
if(b->somamedia[i]/2 < 6.0)
printf("Reprovado\n\n"
else
printf("Aprovado\n\n"
}
}
É só isso que falta para eu finalizar meu trabalho.
Obrigado
- Home
- >
- Fórum
- >
- Profissional
- >
- Programação, Sc...
- >
- [Ajuda]Cadastro de alunos...
kra eu resolvi o seu problema, ao inves de voce checar depois que a matricula ja esta efetuada o faca na hora de insercao.
No caso faca um while que varre seu vetor em tempo de execucao, pois qual o proposito em voce checar algo que ja esta cadastrado mas nao deveria?
No caso o certo seria fazer o que eu te falei falei, nao deixar a pessoa inserir a matricula caso ela ja exista, logo faz o while em cima do vetor enquanto a pessoa tenta inserir o numero.
Bom se nao conseguir me fala q eu te passo o codigo, mas acho qe o ideal era voce fazer e outra nao sei como é o nivel de suas provas aih mas se tu nao conseguir fazer isso kra...estuda um poko mais aih..flwww.
aew brother tentei fazer mas fiquei perdidão, tem como postar para eu dar uma olhada...vlws
Tente pensar da seguinte forma:
-Peça a matrícula ao usuário e guarde em uma variável separada (um int qualquer)
-Use esse int para procurar se a matrículo já está no vetor (um loop)
-Se não estiver, insere, senão, imprime um erro
Simples assim