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

Dúvida sobre ponteiro para ponteiro com struct e alocação dinâmica


John Cunha

Pergunta

Olá, estou com um exercício da faculdade que não consegui resolver, é um exercício onde preciso utilizar ponteiro para ponteiro em uma struct mas estou muito perdido na sintaxe. o exercício é o seguinte:

Faça uma struct com dois campos, uma string para nome e um int para armazenar um número inteiro. Na main peça para o usuário digitar o tamanho do array da struct. Crie uma função para alocar dinamicamente esse array de struct e ler os dados digitados pelo usuário. Faça uma função que verifica os números pares digitados pelo usuário na struct e se o número for par dentro do if se chama outra função para manipular esse número par passando toda a struct, essa função deve receber a struct mas manipular apenas o número par dela e dividi-lo por 2 alterando a struct original. No final o programa deve imprimir na main o array dos números.

Eu consegui fazer alocando na própria main, mas dessa forma com uma função separada não consegui. Vou deixar meu código, que deve ter vários erros mas serve pra ilustrar bem o que o exercício pede.

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

struct dados{
    char nome[5];
    int num;
};

typedef struct dados dado;

void manipula_um_par(dado **q){
    **q.num=**q.num/2;
}

void manipula_pares(dado **q,int *x){
    int i;
    for(i=0;i<*x;i++){
        if(*(*q[i]).num%2==0){
            manipula_um_par(&q[i]);
        }
    }
}

void define_structs(int *n, dado *q){
    dado *p;
    int i;
    p = (dado *) malloc(*n*sizeof(dado));
    printf("\n");
    for(i=0;i<*n;i++){
        printf("Digite o %dº nome: ",i+1);
        gets(p[i].nome);
        setbuf(stdin,NULL);
        printf("Digite o %dº número: ",i+1);
        scanf("%d", &p[i].num);
        setbuf(stdin,NULL);
        printf("\n");
    }
    q=&p;
}

int main(){

setlocale(LC_ALL, "Portuguese_Brazil");

    int n, i;
    dado **q;

    printf("Digite o tamanho do vetor de struct: ");
    scanf("%d",&n);
    setbuf(stdin,NULL);

    q = (dado *) malloc(n*sizeof(dado));

    define_structs(&n,q);

    manipula_pares(q,&n);

    for(i=0;i<n;i++){
        printf("%d\n", **q[i].num);
    }

    printf("\n");

    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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