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

09/04/2019

0

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;
}
John Cunha

John Cunha

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar