Ir ao conteúdo

Posts recomendados

Postado

Ola, estou tentando resolver esse problema:

image.png.a8615b258e1511d1caa01ab4f1f5d558.png

 

Entretanto, meu codigo esta assumindo a altura total como lixo de memoria logo apos eu determinar que a altura total = 0 e comecar a fazer o "for".

Se puderem me ajudar, agradeco. Faz 2 semanas que comecei a estudar programacao!

 

#include <stdio.h>

int main (){

    int n, i;
    double hmedia, htotal, menor;

    printf("Quantas pessoas serao digitadas? ");
    scanf("%d", &n);

    char nome[n][50];
    int idade[n];
    double altura[n];

    for (i=1;i<=n;i++) {
        printf("Dados da %da pessoa:\n", i);
        printf("Nome: ");
        fseek(stdin, 0, SEEK_END);
        gets(nome[i]);
        printf("Idade: ");
        scanf("%d", &idade[i]);
        printf("Altura: ");
        scanf("%d", &altura[i]);
    }
        
    htotal = 0;
    for (i=1;i<=n;i++) {
        htotal = htotal + altura[i];
    }
    hmedia = ((double)htotal/n);
    printf("\nAltura media: %.2lf\n", hmedia);

    menor = 0;
    for(i=1;i<=n;i++) {
        if(idade[i]<16){
            menor = menor+1;
        }
    }
    menor = (menor*100)/n;
    printf("Pessoas com menos de 16 anos: %.1lf % \n", menor);

    for(i=1;i<=n;i++) {
        if(idade[i]<16){
            printf("%s\n", nome[i]);
        }
    }






                            return 0;
}

meu codigo:
 

 

adicionado 11 minutos depois

Gente, consegui resolver!
Eu tinha revisado tudo umas 3x, entretanto o erro tava na linha "scanf("%d", &altura);" coloquei valor de inteiro para double! 

desculpem o incomodo, se puderem me dizer como posso excluir o post ficaria grato! boa tarde a todos.

  • Obrigado 1
Postado

Eu não entendo muito de C, mas o problema parece estar em:

gets(nome[i]);

O compilador que usei dizia isso: "warning: implicit declaration of function", e, como você não declarou nenhuma função com esse nome, o seu compilador pode estar indicando o "lixo".

O programa que rodou sem warns ou erros aqui:

#include <stdio.h>

int main (){

    int n, i;
    double hmedia, htotal, menor;

    printf("Quantas pessoas serao digitadas? ");
    scanf("%d", &n);

    char nome[n][50];
    int idade[n];
    double altura[n];

    for (i=1; i<=n; i++) {
        printf("Dados da %da pessoa:\n", i);
        printf("Nome: ");
        scanf("%s", nome[i]);
        fseek(stdin, 0, SEEK_END);
        printf("Idade: ");
        scanf("%d", &idade[i]);
        printf("Altura: ");
        scanf("%lf", &altura[i]);
    }
        
    htotal = 0;
    for (i=1;i<=n;i++) {
        htotal = htotal + altura[i];
    }
    hmedia = ((double)htotal/n);
    printf("\nAltura media: %.2lf\n", hmedia);

    menor = 0;
    for(i=1;i<=n;i++) {
        if(idade[i]<16){
            menor = menor+1;
        }
    }
    menor = (menor*100)/n;
    printf("Pessoas com menos de 16 anos: %.1lf\n", menor);

    for(i=1;i<=n;i++) {
        if(idade[i]<16){
            printf("%s\n", nome[i]);
        }
    }
   return 0;
}

 

  • Curtir 2
Postado
50 minutos atrás, luanzinh0 disse:

fseek(stdin, 0, SEEK_END);

 

Em geral não faz muito sentido usar isso. Talvez se a entrada padrão estiver redirecionada para um arquivo algo como

    type x.txt | programa.exe

para ler de  x.txt ao invés do teclado em Windows.

 

Recomento evitar. Se quer ler até o '\n' faça isso explicitamente. fseek() em stdin não faz sentido, como não faz fflush().

 

 

  • Curtir 3

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...