Ir ao conteúdo
  • Cadastre-se

C como resolver esses exercicios de struct


Posts recomendados

Olá, tenho que fazer os itens 2 e 3 do main , alguém pode me ajudar? Estou com muita dificuldade...

 

#include<stdio.h>

#include<stdlib.h>

typedef struct{

    int dia, mes, ano;

}Data;

typedef struct{

    char nome[30];

    float altura;

    }Pessoa[10];

    Pessoa pessoa;

    int i=0;

void CriaData(Data d){ 

   d.mes = 1 + (rand() % 12);

   d.ano = 1950 + (rand() % 69);

   d.dia = 1 + (rand() % 30);

   printf("\n%d-",d.dia);

   printf("\n%d-",d.mes);

   printf("\n%d",d.ano); 

}//fim do criar data

void DadosPessoais(){

getchar();

printf("Digite seu Nome: ");

gets(pessoa[i].nome);

printf("Digite sua Altura: ");

scanf("%f",&pessoa[i].altura);

i++;   

}//fim do DadosPessoais



int main(){

Data teste;

int resp,cont=0;

do{

   printf("\nO que deseja fazer: \n");

   printf("1 - Cadastro: \n");

   printf("2 - Listar todos os nomes e respectivas alturas \n");

   printf("3 - Listar os nomes das pessoas que nasceram antes de uma certa data\n");

   printf("0 - Sair\n");

   scanf("%d",&resp);

       int resp2=1;

   switch (resp){

         case 1:

while(resp2!=0){

   DadosPessoais();

    cont++;

    printf("Deseja Fazer um novo Cadastro digite 1 para continuar e 0 para finalizar");

        scanf("%d",&resp2);

  }//fim do while

break;

        case 2: 

  for(int j=0;j<cont;j++){

    puts(pessoa[j].nome);

    printf("%f",pessoa[j].altura);

      }//fim do for

break;

case 3: 

  printf("\nNada ainda\n");

break;

        default:

          exit(0);

       }//fim do switch

}while(resp!=0);

}//fim do main

 

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

Vou me atentar ao problema do que ao seu código.

Pra armazenar mais de um dado você vai precisar bolar algum meio que armazene mais de um dados.

Por exemplo, você pode:
1-usar um vetor estático pra guardar as datas

2-usar um vetor alocado dinamicamente a cada vez que precisar adicionar algum dado.

Eu sei que existem bem mais formas do que essas duas, mas vou me fixar nelas pra você entender a diferença e assim poder aprender a usar as outras opções não listadas.

Em 1 é o mais simples mas também é o mais limitado. Aqui você cria uma variável que é um vetor do tipo Data, exemplo: Data dados[100]. Nessa variável de exemplo temos espaço pra 100 datas (iguais ou diferentes). Não importa se o computador onde roda o programa tem 2GB de ram ou mesmo 8GB, sempre teremos 100 espaços pra data.

Agora, em 2, a coisa muda um pouco. Se você optar por 2, ai teremos de alocar dinamicamente cada data e guardar o ponteiro em algum lugar. Aloca-se memória por exemplo com calloc ou malloc, ou mesmo realloc. Isso dá muito mais trabalho que o 1 porque você tem de saber trabalhar com funções de alocação de espaço/memória. É por isso que recomendo que opte 1 por enquanto pra evitar maiores dores de cabeça, mas digo que com 2 você aprende muito mais.

 

Vou usar 1 como exemplo abaixo:

Em 1 primeiro você precisa: declarar um vetor de Data. Exemplo: Data dados[100];//vetor de 100 datas

Depois, você precisa decidir como fará pra colocar cada data no vetor dados. vamos supor que você queira inserir a data na última posição dispon[ivel em dados. Dai você precisa de outra variável que guarda a ultima posição colocada nos dados:
Data dados[100];

int ultimo = 0;//ultima posição com o último dado

Dai quando for inserir uma data em dados você faz:
...

-leia e inicie uma data, chame de Data aux;

-incremente em 1 o ultimo: ultimo++;

-coloque aux na última posição de dados: dados[ultimo] = aux;

-volte para a tela de menu.

 

Observe que quando incrementar o ultimo, você deve verificar se ele não passa do tamanho total do vetor, no nosso caso, ele não pode ser maior ou igual a 100.

 

Pra excluir um dado, faça:

...

-você pode simplesmente decrementar em 1 a variavel ultimo: ultimo--;

-dai você deve verificar se essa variavel é menor ou igual a 0. Se for, faça ultimo = 0;

 

Veja que, nosso "banco de dados" é controlado pela variavel ultimo, inserir dados, devemos incrmementar ultimo, excluir dados devemos decrementar ultimo.

 

Agora, como vamos fazer pra saber quais dados mostrar na tela? Ou melhor, quais dados do vetor dados devem ser imprimidos?
Batsa usar um for e percorrer o vetor dados de 0 até ultimo e imprimir o que for necessário.
 

adicionado 2 minutos depois

NOTA: esqueci de uma coisa, que você não está usando só datas, mas uma struct de pessoas.

Sendo assim, na minha explicação basta substituir o vetor Data dados[100] por Pessoa dados[100];, a explicação é a mesma

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!