Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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
Postado (editado)

O quê? está errado exatamente.

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

Editado por AnsiC
  • 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






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

×