Ir ao conteúdo

Posts recomendados

Postado

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

 

Postado
#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){
    
    int i;
    dado *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);


    define_structs(n,&q);

    manipula_pares(q,n);

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

    printf("\n");

    return 0;
}

 

  • Obrigado 1

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!