Ir ao conteúdo
  • Cadastre-se
SamuelBrev

C Qual erro estou cometendo ?

Recommended Posts

Bom dia clube,

É o seguinte, sempre que executo o for para ler quem sao os alunos e as notas o programa não lê nada após, pois eu quero colocar um if para saber quem são os aprovados. Qual o erro que estou cometendo ?

Questão_Os alunos de informática tiveram cinco provas (uma de cada matéria/disciplina): 1, 2, 3, 4 e 5. Considere aprovado o aluno com nota igual ou superior a 7.0. Criar um programa que leia o Nome dos alunos e as suas respectivas cinco notas. Inicialmente o programa deve perguntar quantos alunos existem na turma e deve também imprimir: Nome dos que foram aprovados em todas as matérias; 

Nome dos alunos aprovados nas matérias 1 e 4;

A porcentagem dos aprovados na matéria 3;

 

Meu programa:

int main(int argc, char *argv[]) {
    char aluno;
    int i, n, aprovadoNota3;
    double nota1, nota2, nota3, nota4, nota5, porcentagem;
    
    printf("\n Quantos alunos tem na turma:");
    scanf("%d", &n);
    
    for( i = 1; i <= n ; i++)
    {
        printf("\n Digite o nome do aluno %i: ", i);
        scanf("%s", &aluno);
        printf("\n Digite a nota da p1: ");
        scanf("%f", &nota1);
        printf("\n Digite a nota da p2: ");
        scanf("%f", &nota2);
        printf("\n Digite a nota da p3: ");
        scanf("%f", &nota3);
        printf("\n Digite a nota da p4: ");
        scanf("%f", &nota4);
        printf("\n Digite a nota da p5: ");
        scanf("%f", &nota5);
      
      if( nota1 >= 7 && nota2 >= 7 && nota3 >= 7 && nota4 >= 7 && nota5 >= 7)
      {
        printf("\n Aprovado: %s", aluno);
      }else if( nota1 >= 7 && nota4 >= 7 )
      {
          printf("\n Alunos aprovados na p1 e p4: %s", aluno);
      }else if( nota3 >= 7)
      {
          aprovadoNota3++;
      }
    }
    porcentagem = aprovadoNota3*100 / n;
    printf("\n Alunos aprovados na p3: %f", porcentagem);

    
    
    
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

já tentou usar while ao invés de for?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@SamuelBrev Você sabe como se grava string em c?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC sim

adicionado 1 minuto depois

@aerolipe vou tentar, mas eu acho que com while eu não conseguiria colocar um criterio de quantas vezes ia ser repetido(perguntado) ou conseguiria ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, SamuelBrev disse:

sim

então sabe que char aluno; deve ser char aluno[aluno_tamanho];

adicionado 1 minuto depois

onde aluno_tamanho é uma constante numérico com tamanho do nome do aluno!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC sim, eu tinha esquecido de colocar ali, mas mesmo eu colocando-o meu programa não lê o IF logo abaixo do for.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você sabe com ler tipos Double com scanf ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@SamuelBrev Quase! Quando se trada de Double usa-se %lf

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC putz, muito obrigado tinha esquecido desse detalhe, agora deve funcionar.

adicionado 5 minutos depois

Outra coisa pra fechar, na hora do "printf("\n Aprovado: %s", aluno); " só está imprimindo o nome do ultimo aluno aprovado, como faço pra imprimir os outros alunos quaisquer aprovados ? Não consigo pensar um outra função pra ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, SamuelBrev disse:

deve também imprimir: Nome dos que foram aprovados em todas as matérias; 

Nome dos alunos aprovados nas matérias 1 e 4;

Se é dessa condição que está falando, então tire o else antes dos ifs e depois teste.

  • Confuso 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC Tentei fazer o que me falasse pra fazer, mas n obtive resultado. 

Exemplo:

"printf("\n Aprovado: %s", aluno); " 

Neste printf eu quero que apareça mais de 1 nome, tem como ? Pois, só estas aparecendo apenas 1 aprovado, ou seja na minha leitura eu não tenho só 1 aprovado.

  • Confuso 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso de um print-screen de sua tela para entendimento.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC Segue a imagem da execução, ali onde está a saída "Alunos aprovados: " e "Alunos aprovados na p1 e p4" está aparecendo o nome de 1 só aprovado, sendo que tem 2. Como fazer para que possa aparecer os outros nomes aprovados tambem.

imgaem.bmp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uhmm! Entendi.

Colocando a rotina de verificação

 if( nota1 >= 7 && nota2 >= 7 && nota3 >= 7 && nota4 >= 7 && nota5 >= 7)
      {
        printf("\n Aprovado: %s", aluno);
      }else if( nota1 >= 7 && nota4 >= 7 )
      {
          printf("\n Alunos aprovados na p1 e p4: %s", aluno);
      }else if( nota3 >= 7)
      {
          aprovadoNota3++;
      }

dentro do loop, mais precisamente depois da última nota lida, verá imediatamente se o aluno em questão foi ou não foi aprovado ... Isso resolve ?

  • Curtir 1

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

×