Ir ao conteúdo
  • Cadastre-se

C Vetor de Struct dando Segmentation fault


JhonesJGL
Ir à solução Resolvido por KXSY,

Posts recomendados

Quando excecuto esse programa ele faz tudo com exceção da última linha. Se eu colocar mais comandos todos funcionam, mas a última linha sempre dá Segmentation fault.

Podem me ajudar?

//Faça um programa que receba a idade e o peso de 7 pessoas . Calcule e mostre: A quantidade de pessoas com mais de 90 quilos; A média das idades das sete pessoas.
#include <stdio.h>
#define num_pessoas 7
    typedef struct
    {
        int idade;
        float peso;
        } Pessoa;
    
    int main ()
    {
        Pessoa qtp[num_pessoas - 1];
        int i, quant_acima90 = 0, soma = 0;
        float media;
        for (i = 0; i < num_pessoas; i++)
        {
            printf ("Informe a idade da %d° pessoa: ", i+1);
            scanf ("%d", &qtp.idade);
            printf ("Informe o peso da %d° pessoa: ", i+1);
            scanf ("%f", &qtp.peso);
            printf ("\n");
            soma += qtp.idade;
            if (qtp.peso > 90)
            {
                quant_acima90 ++;
            }
            }
            media = soma/num_pessoas;
            printf ("%d pessoas estão acima de 90Kg.", quant_acima90);
            printf ("\nA media das idades das pessoas e: %.2f", media);
return (0);
    }

 

Link para o comentário
Compartilhar em outros sites

Você reparou que você está usando o endereço do primeiro ponteiro da matriz para pegar as informações?

1 hora atrás, JhonesJGL disse:

scanf ("%d", &qtp.idade);

isso está errado é a maioria dos compiladores não aceitaria compilar essa sentença.

Aqui o programa "funcionando".

Spoiler

//Faça um programa que receba a idade e o peso de 7 pessoas . Calcule e mostre: A quantidade de pessoas com mais de 90 quilos; A média das idades das sete pessoas.
#include <stdio.h>
#define num_pessoas 7
    typedef struct
    {
        int idade;
        float peso;
        } Pessoa;
    
    int main ()
    {
        Pessoa qtp[num_pessoas - 1];
        int i, quant_acima90 = 0, soma = 0;
        float media;
        for (i = 0; i < num_pessoas; i++)
        {
            printf ("Informe a idade da %d° pessoa: ", i+1);
            scanf ("%d", &qtp[i].idade);
            printf ("Informe o peso da %d° pessoa: ", i+1);
            scanf ("%f", &qtp[i].peso);
            printf ("\n");
            soma += qtp[i].idade;
            if (qtp[i].peso > 90)
            {
                quant_acima90 ++;
            }
        }
            media = soma/num_pessoas;
            printf ("%d pessoas estão acima de 90Kg.", quant_acima90);
            printf ("\nA media das idades das pessoas e: %.2f", media);
return (0);
    }

 

Qual seria a sua intenção por optar usar um vetor ao invés de uma variável?

 

O que significa esse -1?

1 hora atrás, JhonesJGL disse:

Pessoa qtp[num_pessoas - 1];

 

Você usa um IDE ou alguma coisa para compilar o código?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, KXSY disse:

Você reparou que você está usando o endereço do primeiro ponteiro da matriz para pegar as informações?

isso está errado é a maioria dos compiladores não aceitaria compilar essa sentença.

Aqui o programa "funcionando".

  Mostrar conteúdo oculto


//Faça um programa que receba a idade e o peso de 7 pessoas . Calcule e mostre: A quantidade de pessoas com mais de 90 quilos; A média das idades das sete pessoas.
#include <stdio.h>
#define num_pessoas 7
    typedef struct
    {
        int idade;
        float peso;
        } Pessoa;
    
    int main ()
    {
        Pessoa qtp[num_pessoas - 1];
        int i, quant_acima90 = 0, soma = 0;
        float media;
        for (i = 0; i < num_pessoas; i++)
        {
            printf ("Informe a idade da %d° pessoa: ", i+1);
            scanf ("%d", &qtp[i].idade);
            printf ("Informe o peso da %d° pessoa: ", i+1);
            scanf ("%f", &qtp[i].peso);
            printf ("\n");
            soma += qtp[i].idade;
            if (qtp[i].peso > 90)
            {
                quant_acima90 ++;
            }
        }
            media = soma/num_pessoas;
            printf ("%d pessoas estão acima de 90Kg.", quant_acima90);
            printf ("\nA media das idades das pessoas e: %.2f", media);
return (0);
    }

 

Qual seria a sua intenção por optar usar um vetor ao invés de uma variável?

 

O que significa esse -1?

 

Você usa um IDE ou alguma coisa para compilar o código?

 

Na verdade, parece que ocorreu um erro quando colei, porque eu coloquei o 

qtp[i].idade

 quando estava fazendo, mas quando colei aqui ele apagou 😕 minha dúvida na verdade é que estou colocando assim, mas ainda dá segmentation fault. Obrigado!

3 horas atrás, KXSY disse:

Você reparou que você está usando o endereço do primeiro ponteiro da matriz para pegar as informações?

isso está errado é a maioria dos compiladores não aceitaria compilar essa sentença.

Aqui o programa "funcionando".

  Mostrar conteúdo oculto


//Faça um programa que receba a idade e o peso de 7 pessoas . Calcule e mostre: A quantidade de pessoas com mais de 90 quilos; A média das idades das sete pessoas.
#include <stdio.h>
#define num_pessoas 7
    typedef struct
    {
        int idade;
        float peso;
        } Pessoa;
    
    int main ()
    {
        Pessoa qtp[num_pessoas - 1];
        int i, quant_acima90 = 0, soma = 0;
        float media;
        for (i = 0; i < num_pessoas; i++)
        {
            printf ("Informe a idade da %d° pessoa: ", i+1);
            scanf ("%d", &qtp[i].idade);
            printf ("Informe o peso da %d° pessoa: ", i+1);
            scanf ("%f", &qtp[i].peso);
            printf ("\n");
            soma += qtp[i].idade;
            if (qtp[i].peso > 90)
            {
                quant_acima90 ++;
            }
        }
            media = soma/num_pessoas;
            printf ("%d pessoas estão acima de 90Kg.", quant_acima90);
            printf ("\nA media das idades das pessoas e: %.2f", media);
return (0);
    }

 

Qual seria a sua intenção por optar usar um vetor ao invés de uma variável?

 

O que significa esse -1?

 

Você usa um IDE ou alguma coisa para compilar o código?

Eu uso o IDE cxxdroid da playstore e o "-1" era para o vetor ter 1 a menos do número de pessoas já que conta a partir do 0. Eu usei o vetor porque queria experimentá-lo, achei que seria melhor que uma variável caso precisasse aumentar o número de pessoas.

Link para o comentário
Compartilhar em outros sites

  • Solução
6 minutos atrás, JhonesJGL disse:

Na verdade, parece que ocorreu um erro quando colei, porque eu coloquei o "qtp.idade" quando estava fazendo, mas quando colei aqui ele apagou 😕 minha dúvida na verdade é que estou colocando assim, mas ainda dá segmentation fault.

sim. mas preste atenção no vetor ele vai 0...6 então ele tem 7 posições, mas quando você declarou tirou uma  posição então ele vai de 0...5 quer dizer que ele tem 6 posições e você está lendo os dados como se tivesse 7.

 

4 horas atrás, JhonesJGL disse:

for (i = 0; i < num_pessoas; i++)

o for vai se repetir por 6 vezes fazendo assim o scanf gravar dados em uma área de memoria não reservada.

 

13 minutos atrás, JhonesJGL disse:

Eu uso o IDE cxxdroid da playstore e o "-1" era para o vetor ter 1 a menos do número de pessoas já que conta a partir do 0. Eu usei o vetor porque queria experimentá-lo, achei que seria melhor que uma variável caso precisasse aumentar o número de pessoas.

Se você estiver usando um teclado físico recomendo usar esse site repl.it.

adicionado 11 minutos depois

Eu consertei o seu programa dessa vez e coloquei um exemplo de como usar o vetor.

//Faça um programa que receba a idade e o peso de 7 pessoas . Calcule e mostre: A quantidade de pessoas com mais de 90 quilos; A média das idades das sete pessoas.
#include <stdio.h>
#define num_pessoas 7
typedef struct
{
  int idade;
  float peso;
}pesso_t;
    
int main(void)
{
  pesso_t pessoas[num_pessoas];
  int i, quant_acima90 = 0, soma = 0;
  float media;
  for (i = 0; i < num_pessoas; i++)
  {
    printf ("Informe a idade da %d° pessoa: ", i+1);
    scanf ("%d", &pessoas[i].idade);
    printf ("Informe o peso da %d° pessoa: ", i+1);
    scanf ("%f", &pessoas[i].peso);
    printf ("\n");
    soma += pessoas[i].idade;
    if (pessoas[i].peso > 90)
    {
      quant_acima90 ++;
    }
  }
  media = soma/num_pessoas;
  printf ("%d pessoas estão acima de 90Kg.", quant_acima90);
  printf("\nIdade e peso das pessoas que estão acima de 90Kg.");
  for(i=0; i<num_pessoas; i++)
  {
    if(pessoas[i].peso>90)
    {
      printf("\nIdade:\t%i",pessoas[i].idade);
      printf("\nPeso:\t%2.f",pessoas[i].peso);
    }
  }
  printf ("\nA media das idades das pessoas e: %.2f", media);
  getchar();    /* Pausa */
  return (0);
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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...