Ir ao conteúdo
  • Cadastre-se
Jessé P. de Melo

C comportamento inesperado ao comparar membro de struct com valor float

Recommended Posts

Boa tarde.

estou fazendo o seguinte exercício:

Faça um programa que leia os dados de 10 alunos (Nome, matricula, Media Final), armazenando em um vetor. Uma vez lidos os dados, divida estes dados em 2 novos vetores, o vetor dos aprovados e o vetor dos reprovados, considerando a media mınima para a aprovacao como sendo 5.0. Exibir na tela os dados do vetor de aprovados, seguido dos dados do vetor de reprovados.

Desenvolvi o script abaixo, porque esta dando errado?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void main (void){
    struct classe{ /*Cria tipo struct*/
        char nome[30];
        char matricula[8];
        float media_final;
    };

    struct classe alunos[10]; /*Cria variaveis do tipo strutc para calculos*/
    struct classe alunos_rep[10];
    struct classe alunos_aprov[10];

    for(int x=0;x<10;x++){ /*Coloca os campos que vão ser impressos como em branco para facilitar impressao*/
        strcpy(alunos_rep[x].nome," ");
        strcpy(alunos_aprov[x].nome," ");
    }

    for(int x=0;x<10;x++){  /*Entrada de dados*/
        printf("Digite o nome: ");
        scanf("%s",&alunos[x].nome);
        fflush(stdin);
        printf("Digite o numero da matricula: ");
        scanf("%s",&alunos[x].matricula);
        fflush(stdin);
        printf("Digite a media final: ");
        scanf("%f",&alunos[x].media_final);
        fflush(stdin);
        printf("\n");
    }
    
    int cont_aprov=0; /*Variaveis para percorrer o vetor a ser impresso */
    int cont_rep=0;
    
    for (int x=0;x<10;x++){
        if(alunos[x].media_final<5.0){/*ONDE ACHO QUE ESTA O ERRO comparações para saber para qual vetor o registro atual vai*/
            alunos_rep[cont_rep]=alunos[x];
            cont_rep++;
        }
        else{
            alunos_aprov[cont_aprov]=alunos[x];
            cont_aprov++;
        }
    }

    for(int x=0;x<10;x++){ /*printa o que estiver no vetor aprovado e reprovado*/
        if(alunos_aprov[x].nome!=" "){
            printf("[Aprovado]\nNome: %s\nMatricula: %s\nNota: %2.1f\n\n",alunos[x].nome,alunos[x].matricula,alunos[x].media_final);
        }
    }

    for(int x=0;x<10;x++){
        if(alunos_rep[x].nome!=" "){
            printf("[Reprovado]\nNome: %s\nMatricula: %s\nNota: %2.1f\n\n",alunos[x].nome,alunos[x].matricula,alunos[x].media_final);
        }
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O quê? está errado exatamente.

Qual é o resultado da saída e da entrada nos testes realizados? Estou sem computador para testar!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

OS dois vetores que criei esta imprimindo tudo novamente. Acredito que o problema seja nessa linha

5 minutos atrás, Jessé P. de Melo disse:

if(alunos[x].media_final<5.0)

Resumindo alunos_rep alunos_aprov virou uma copia de alunos.

adicionado 10 minutos depois

Perai o erro ta aqui. Estou ocupado agr assim que der arrumo. E falo

16 minutos atrás, Jessé P. de Melo disse:

printf("[Aprovado]\nNome: %s\nMatricula: %s\nNota: %2.1f\n\n",alunos[x].nome,alunos[x].matricula,alunos[x].media_final);

 

16 minutos atrás, Jessé P. de Melo disse:

printf("[Reprovado]\nNome: %s\nMatricula: %s\nNota: %2.1f\n\n",alunos[x].nome,alunos[x].matricula,alunos[x].media_final);

 

adicionado 28 minutos depois

Resolvi era aquilo mesmo. Desculpe pelo inconveniente.

Segue: 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void main (void){
    struct classe{ /*Cria tipo struct*/
        char nome[30];
        char matricula[8];
        float media_final;
    };

    struct classe alunos[10]; /*Cria variaveis do tipo strutc para calculos*/
    struct classe alunos_rep[10];
    struct classe alunos_aprov[10];

    for(int x=0;x<10;x++){ /*Coloca os campos que vão ser impressos como em branco para facilitar impressao*/
        alunos_rep[x].nome[0]=' ';
        alunos_aprov[x].nome[0]=' ';
    }

    for(int x=0;x<10;x++){  /*Entrada de dados*/
        printf("Digite o nome: ");
        scanf("%s",&alunos[x].nome);
        fflush(stdin);
        printf("Digite o numero da matricula: ");
        scanf("%s",&alunos[x].matricula);
        fflush(stdin);
        printf("Digite a media final: ");
        scanf("%f",&alunos[x].media_final);
        fflush(stdin);
        printf("\n");
    }

    int cont_aprov=0; /*Variaveis para percorrer o vetor a ser impresso */
    int cont_rep=0;

    for (int x=0;x<10;x++){
        if(alunos[x].media_final<(5.0)){/*ONDE ACHO QUE ESTA O ERRO comparações para saber para qual vetor o registro atual vai*/
            alunos_rep[cont_rep]=alunos[x];
            cont_rep++;
        }
        if(alunos[x].media_final>(5.0)){
            alunos_aprov[cont_aprov]=alunos[x];
            cont_aprov++;
        }
    }

    for(int x=0;x<10;x++){ /*printa o que estiver no vetor aprovado e reprovado*/
        if(alunos_aprov[x].nome[0]!=' '){
            printf("[Aprovado]\nNome: %s\nMatricula: %s\nNota: %2.1f\n\n",alunos_aprov[x].nome,alunos_aprov[x].matricula,alunos_aprov[x].media_final);
        }
    }

    for(int x=0;x<10;x++){
        if(alunos_rep[x].nome[0]!=' '){
            printf("[Reprovado]\nNome: %s\nMatricula: %s\nNota: %2.1f\n\n",alunos_rep[x].nome,alunos_rep[x].matricula,alunos_rep[x].media_final);
        }
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×