Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Isadora Maria Mendes

Comparar char de uma struct (lógica)

Recommended Posts

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;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Isadora, sou novo aqui mas pelo pouco que aprendi, sei que você não pode comparar duas strings com ==.

Você deve usar a função strcmp pois ela compara duas strings.

 

A sintaxe dela conforme seu exercício seria assim:

strcmp(vet[i].turma, turma)

 

Neste link você pode aprender mais sobre o uso dessa função: strcmp.

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.