Ir para conteúdo
gust.php

Struct vetor

Recommended Posts

Senhores, boa tarde.

 

Preciso da ajuda de vcs. Estou fazendo um trabalho para faculdade e tenho que criar um programinha em C para fazer o seguinte.

 

Tenho que cadastrar 3 pessoas com nome, idade, sexo, quantidade de filhos e renda. Depois mostrar quantos homens, quantas mulheres. Tem mais coisa, mais acredito que resolvendo isso, resolvo o resto.

 

Estou com a estrutura montada e compilando sem erro, só que o resultado esta saindo com números absurdos.

 

Tipo: Quantos homens e quantas mulheres cadastradas ?

 

O resultado aparece -321674 homens e 21345 mulheres

 

meu código esta assim:

 

 
#include <stdio.h>
#include <string.h>

struct registro
    {
      char nome[30];
      int idade;
      char sexo;
      int nfilhos;
      float renda;
    };


int main()
    {
        struct registro cadastro [3];
        int i, op, totalh, totalm, qhomem, qmulher, j, trenda, cod;
        char homem = 'M', mulher = 'F';


        op = 0;

        while (op !=6)
        {
        printf("======================================================================= \n");
        printf("1 - CADASTRAR \n");
        printf("2 - PERCENTUAL DE MULHERES E HOMENS \n");
        printf("3 - NUMERO DE PESSOAS QUE GANHAM ACIMA DE 500 REAIS \n");
        printf("4 - PERCENTUAL DE PESSOAS QUE TEM AO MENOS 1 FILHO \n");
        printf("5 - NUMERO DE PESSOAS QUE NASCERAM A PARTIR DO ANO 2000 \n");
        printf("6 - SAIR \n");
        printf("======================================================================== \n");

        printf("DIGITE UMA OPÇAO: ");

        scanf("%d", &op);
 
       if (op == 1)
           {
            for (i=0; i<3; i++)
                {
                 printf("Digite o nome: \n");
                 scanf("%29s", cadastro[i].nome);
                 printf("Digite a idade: \n");
                 scanf("%d", &cadastro[i].idade);
                 printf("Qual o sexo - M ou F:  \n");
                 scanf("\n%c", &cadastro[i].sexo);
                 printf("Quntidade de filhos: \n");
                 scanf("%d", &cadastro[i].nfilhos);
                 printf("Digite sua renda: \n");
                 scanf("%f", &cadastro[i].renda);
                }

           }

         if (op == 2)
            {
             while (j < 3)
                {
                   if(cadastro[i].sexo == homem)
                     {
                      totalh = (totalh + 1);
                     }
                   else if(cadastro[i].sexo == mulher)
                     {
                      totalm = (totalm + 1);
                     }
                  j++;
                }
                printf("%d Total de Homens: \n", totalh);
                printf("%d Total de Mulheres: \n", totalm);

            }

 

Alguem pode ajudar?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores, boa tarde.

 

Preciso da ajuda de vcs. Estou fazendo um trabalho para faculdade e tenho que criar um programinha em C para fazer o seguinte.

 

Tenho que cadastrar 3 pessoas com nome, idade, sexo, quantidade de filhos e renda. Depois mostrar quantos homens, quantas mulheres. Tem mais coisa, mais acredito que resolvendo isso, resolvo o resto.

 

Estou com a estrutura montada e compilando sem erro, só que o resultado esta saindo com números absurdos.

 

Tipo: Quantos homens e quantas mulheres cadastradas ?

 

O resultado aparece -321674 homens e 21345 mulheres

 

meu código esta assim:

 
#include <stdio.h>
#include <string.h>

struct registro
    {
      char nome[30];
      int idade;
      char sexo;
      int nfilhos;
      float renda;
    };


int main()
    {
        struct registro cadastro [3];
        int i, op, totalh, totalm, qhomem, qmulher, j, trenda, cod;
        char homem = 'M', mulher = 'F';


        op = 0;

        while (op !=6)
        {
        printf("======================================================================= \n");
        printf("1 - CADASTRAR \n");
        printf("2 - PERCENTUAL DE MULHERES E HOMENS \n");
        printf("3 - NUMERO DE PESSOAS QUE GANHAM ACIMA DE 500 REAIS \n");
        printf("4 - PERCENTUAL DE PESSOAS QUE TEM AO MENOS 1 FILHO \n");
        printf("5 - NUMERO DE PESSOAS QUE NASCERAM A PARTIR DO ANO 2000 \n");
        printf("6 - SAIR \n");
        printf("======================================================================== \n");

        printf("DIGITE UMA OPÇAO: ");

        scanf("%d", &op);
 
       if (op == 1)
           {
            for (i=0; i<3; i++)
                {
                 printf("Digite o nome: \n");
                 scanf("%29s", cadastro[i].nome);
                 printf("Digite a idade: \n");
                 scanf("%d", &cadastro[i].idade);
                 printf("Qual o sexo - M ou F:  \n");
                 scanf("\n%c", &cadastro[i].sexo);
                 printf("Quntidade de filhos: \n");
                 scanf("%d", &cadastro[i].nfilhos);
                 printf("Digite sua renda: \n");
                 scanf("%f", &cadastro[i].renda);
                }

           }

         if (op == 2)
            {
             while (j < 3)
                {
                   if(cadastro[i].sexo == homem)
                     {
                      totalh = (totalh + 1);
                     }
                   else if(cadastro[i].sexo == mulher)
                     {
                      totalm = (totalm + 1);
                     }
                  j++;
                }
                printf("%d Total de Homens: \n", totalh);
                printf("%d Total de Mulheres: \n", totalm);

            }

 

Alguem pode ajudar?

 

Grato.

Fala pessoa, ninguém pode ajudar?

 

Estou com dificuldade nesse trecho do código aqui:

 

 
if (op == 2)
            {
             while (j < 3)
                {
                   if(cadastro[i].sexo == homem)
                     {
                      totalh = (totalh + 1);
                     }
                   else if(cadastro[i].sexo == mulher)
                     {
                      totalm = (totalm + 1);
                     }
                  j++;
                }
                printf("%d Total de Homens: \n", totalh);
                printf("%d Total de Mulheres: \n", totalm);

            }

 

o printf esta retornando um valor absurdo:

tipo Total de homemns: -261548

Total de mulheres: 326764

 

Algo assim. O que estou fazendo de errado na comparação do campo sexo? Eu tenho que ler o vetor da struct antes e depois comprar? Se é isso, como fazer?

 

Ajudem, please.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cadê a inicialização das variáveis antes de usar?
Não fique dando postup...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Isis, boa tarde.

 

Vc leu a mensagem para tentar ajudar? Todas as variáveis estão iniciadas, na segunda citação que fiz, só inclui o trecho do código onde eu acho que o problema esta.

 

Pode deixar que não vou mais dar postup.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Li inclusive o código p/ perguntar isso.

int i, op, totalh, totalm, qhomem, qmulher, j, trenda, cod;

Primeiro uso de totalm e totalh sem inicialização é justamente a contagem dentro do while.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 13/07/2016 at 08:40, _Isis_ disse:

Li inclusive o código p/ perguntar isso.


int i, op, totalh, totalm, qhomem, qmulher, j, trenda, cod;

Primeiro uso de totalm e totalh sem inicialização é justamente a contagem dentro do while.

 

É verdade. O programa mostra o valor de variáveis não inicializadas e que também são incrementadas. Quando não damos um valor inicial a uma variável ela irá conter qualquer valor que esteja gravado naquela região de memória que ela usa para armazenar o valor de seu tipo. Isso é lixo de memória. São bytes que ocupam aquela região até que o valor dessa variável seja sobrescrito. No caso desse programa o valor dessa variável é incrementado então pelo motivo anterior e também por esse o programa mostra números absurdos. 

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.