Comparar char de uma struct (lógica)
Olá pessoal,
Estou com o seguinte problema:
A função buscarAluno_Turma não funciona, pensei na possibilidade do erro ser a condição "(vet.turma == turma)" do programa, pois é uma comparação de um único char.
Me ajudem, please :rolleyes:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 40
typedef struct
{
int RA;
char nome[30];
char turma;
float mediaf;
char conceito;
short usado;
}regAlunos;
//imprime menu
void imprimeMenu()
{
printf("0 - Sair;\n");
printf("1 - Cadastrar Aluno;\n");
printf("2 - Remover Aluno;\n");
printf("3 - Buscar Aluno pelo RA;\n");
printf("4 - Buscar Alunos por turma;\n");
printf("5 - Listar Alunos;\n");
printf("6 - Salvar em arquivo;\n");
printf("7 - Abrir arquivo;\n");
}
void iniciaCadastro(regAlunos vet[], int tam){
int i;
for(i=0; i<tam; i++)
{
vet[i].usado=0;
}
}
//cadastrar aluno
void leAluno(regAlunos *a)
{
printf("RA:\n");
scanf("%d", &(*a).RA);
getchar();
printf("Nome:\n");
scanf("%[^\n]", (*a).nome);
getchar();
printf("Turma:\n");
scanf("%c", &(*a).turma);
getchar();
printf("Media\n");
scanf("%f", &(*a).mediaf);
getchar();
}int cadastraAluno(regAlunos vet[], regAlunos a, int tam)
{
int i;
for(i = 0; i < tam; i++)
{
if(vet[i].usado == 0)
{
vet[i] = a;
vet[i].usado = 1;
return 1;
}
}
return 0;
}
//busca um aluno
int buscarAluno_RA(regAlunos vet[], int ra, int tam)
{
int i;
for(i=0; i<tam; i++)
{
if(vet[i].RA == ra)
{
return i;//retorna a posicao que tem um ra igual
}
}
return -1;
}
//busca um aluno
int buscarAluno_Turma(regAlunos vet[], regAlunos vet_saida[], char turma, int tam)
{
int i, flag=0;
for(i=0; i<tam; i++)
{
if(vet[i].usado == 1)
{
if(vet[i].turma == turma)
{
vet_saida[i].RA = vet[i].RA;
strcpy(vet_saida[i].nome,vet[i].nome);
vet_saida[i].turma = vet[i].turma;
vet_saida[i].mediaf = vet[i].mediaf;
vet_saida[i].conceito = vet[i].conceito;
flag = 1;
}
}
}
if(flag == 1)
{
return -1;
}
else
{
return -2;
}
}
//remove o aluno
void removeAluno(regAlunos vet[], int tam, int posicao)
{
int i;
for(i = posicao; i < (tam - 1); i++)
{
vet[i] = vet[i+1];
}
}
//media
void media(regAlunos vet[], int tam)
{
int i;
for(i = 0; i <tam; i++)
{
if(vet[i].usado == 1)
{
if((vet[i].mediaf >= 0) && (vet[i].mediaf < 4))
{
vet[i].conceito = 'E';
}
else if((vet[i].mediaf >= 4) && (vet[i].mediaf < 6))
{
vet[i].conceito = 'D';
}
else if((vet[i].mediaf >= 6) && (vet[i].mediaf <= 7))
{
vet[i].conceito = 'C';
}
else if((vet[i].mediaf > 7) && (vet[i].mediaf <= 8.4))
{
vet[i].conceito = 'B';
}
else if((vet[i].mediaf > 8.4) && (vet[i].mediaf <= 10))
{
vet[i].conceito = 'A';
}
}
}
}
//imprimir
void imprimeAlunos(regAlunos vet[], int tam){
int i, cont=0;
for(i=0; i<tam; i++)
{
if(vet[i].usado == 1) //se posicao i conter algo valido entao imprime
{
printf("%d: %-6d %-30s %c %c\n", i, vet[i].RA, vet[i].nome, vet[i].turma, vet[i].conceito);
}
else if(vet[i].usado == 0)
{
cont = cont + 1;
}
}
if(cont==40)
{
printf("Erro: nenhum aluno cadastrado.\n");
}
}
//ordenar
void ordemN(int tam, regAlunos vetor[])
{
regAlunos aux;
int i, j;
for(i = 1; i < tam; i++)
{
for(j = i; j > 0; j--)
{
if(vetor[j].RA < vetor[j-1].RA)
{
aux.RA = vetor[j].RA;
strcpy(aux.nome,vetor[j].nome);
aux.turma = vetor[j].turma;
aux.mediaf = vetor[j].mediaf;
aux.conceito = vetor[j].conceito;
vetor[j].RA = vetor[j-1].RA;
strcpy(vetor[j].nome,vetor[j-1].nome);
vetor[j].turma = vetor[j-1].turma;
vetor[j].mediaf = vetor[j-1].mediaf;
vetor[j].conceito = vetor[j-1].conceito;
vetor[j-1].RA = aux.RA;
strcpy(vetor[j-1].nome,aux.nome);
vetor[j-1].turma = aux.turma;
vetor[j-1].mediaf = aux.mediaf;
vetor[j-1].conceito = aux.conceito;
}
}
}
}
int main() {
int op=1, numra, posicao;
char turma;
regAlunos naluno[40];
regAlunos a;
regAlunos naluno_saida[40];
iniciaCadastro(naluno, TAM);
do
{
imprimeMenu();
scanf("%d", &op);
//cadastrar ok
if(op == 1)
{
leAluno(&a);
cadastraAluno(naluno,a,TAM);
media(naluno, TAM);
}
//remover ok
if(op == 2)
{
printf("Deseja remover um aluno(a)? Digite o RA dele(a)\n");
scanf("%d", &numra);
getchar();
posicao = buscarAluno_RA(naluno, numra, TAM);
if(posicao == -1)
{
printf("Erro: aluno nao cadastrado.\n");
}
else
{
removeAluno(naluno, TAM, posicao);
printf("Aluno removido.\n");
}
}
//buscar por RA ok
if(op == 3)
{
printf("Deseja procurar um aluno(a)? Digite o RA dele(a)\n");
scanf("%d", &numra);
posicao = buscarAluno_RA(naluno, numra, TAM);
printf("%-6d %-30s %c %c\n", naluno[posicao].RA, naluno[posicao].nome, naluno[posicao].turma, naluno[posicao].conceito);
}
//buscar por turma
if(op == 4)
{
printf("Deseja procurar alunos(as) de uma mesma turma? Digite a turma deles(as)\n");
scanf("%c", &turma);
getchar();
posicao = buscarAluno_Turma(naluno, naluno_saida, turma, TAM);
if(posicao == -2)
{
printf("Erro: nao ha alunos para a turma.\n");
}
else if(posicao == -1)
{
ordemN(TAM, naluno_saida);
imprimeAlunos(naluno_saida, TAM);
}
}
//listar
if(op == 5)
{
imprimeAlunos(naluno, TAM);
}
//salvar
if(op == 6)
{
}
//abrir
if(op == 7)
{
}
//sair ok
if(op == 0)
{
return 0;
}
}while(op != 0);
return 0;
}Discussão (1)
Carregando comentários...