Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Structs - onde está o erro?


Biglwp

Pergunta

opa, durante a execução deste programa, acontece um erro logo no final.

não estou conseguindo identificar o erro no código, se alguém o identificar, posta aqui por favor.

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


typedef struct pesquisa
{
    int idade;
    char sexo;
    float salario;
    int nFilhos;
} Habitante;

int main ()
{
    int i, k = 1;
    int n;
    double mediaS = 0, mediaF = 0;
    printf ("Digite o numero de habitantes da pesquisa: ");
    scanf ("%d", &n);
    int aux [n], aux2 [n];
    Habitante * habitantes;
    habitantes = (Habitante *) malloc (n * sizeof (Habitante));

    for (i = 0; i < n; i++)
    {
        printf ("\n\nDigite as informacoes do habitante %d [separadas por espaco]: ", k);
        printf ("\nIdade, sexo [m ou f], salario, numero de filhos: ");
        scanf ("%d %c %f %d", &habitantes [i].idade, &habitantes [i].sexo, &habitantes [i].salario, &habitantes [i].nFilhos);
        k++;
    }

    for (i = 0; i < n; i++)
    {
        mediaS = mediaS + habitantes [i].salario;
        mediaF = mediaF + habitantes [i].nFilhos;
    }

    mediaS = mediaS / n;
    mediaF = mediaF / n;

    printf ("\nA media do salario dos habitantes é: %f", mediaS);
    printf ("\nA media do numero de filho dos habitantes é: %f", mediaF);

    int p = 0;
    int p1 = 0;

    for (i = 0; i < n; i++)
    {
        if (habitantes [i].salario < mediaS)
        {
            aux [p] = i + 1;
            p++;
        }

        if (habitantes [i].nFilhos > mediaF)
        {
            aux2 [p1] = i + 1;
            p1++;
        }
    }

    printf ("\n\nOs habitantes com salario abaixo da media foram: ");
    for (i = 0; i <= p; i++)
    {
        if (habitantes [aux [i] - 1].sexo == 'f')
        {
            printf ("\nA habitante %d", aux [i]);
        }
        else
        {
            printf ("\nO habitante %d", aux [i]);
        }
    }
                
                //O ERRO COMEÇA AQUI    
                //entra em um tipo de loop infinito.
    printf ("\n\nOs habitantes com o numero de filho acima da media foram: ");    
    for (i = 0; i <= p1; i++)              
    {
        if (habitantes [aux2 [i] - 1].sexo == 'f')
        {
            printf ("\nA habitante %d", aux2 [i]);
        }
        else
        {
            printf ("\nO habitante %d", aux2 [i]);
        }
    }

        return 0;
}

obrigado.

Editado por Biglwp
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

bem, acho que o propósito do programa esta bem claro no código, mas vou explicar melhor:

é uma pesquisa que recebe alguns dados de certos habitantes.

o programa tem que calcular a média do salario deles e do numero de filhos de cada cidadão, e dizer quais deles estão com salario abaixo da media ou possui mais filhos que a media da populção.

Link para o comentário
Compartilhar em outros sites

  • 0

Evite postar repetidamente. Isso caracteriza up. Se quiser incrementar algo, utilize o botão Editar, primeiramente em casos como o desse tópico (no mesmo dia)

Quanto ao código, note que as variávels p e p1, no final do programa, vão estar com o valor equivalente ao número de elementos de aux e aux2, respectivamente. Mas como os vetores começam em zero, você não deve referenciar aux[p], o máximo que deve chegar é até aux[p-1]. Portanto, ao invés do operador <= uilize <.

Troque:

for (i = 0; i <= p; i++)
Por:
for (i = 0; i < p; i++)
E:
for (i = 0; i <= p1; i++)
Por:
for (i = 0; i < p1; i++)

Poste aí se resolveu o problema.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...