Jump to content
Fórum Script Brasil
  • 0

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


Question

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 to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148691
    • Total Posts
      644531
×
×
  • Create New...