Ir ao conteúdo

Posts recomendados

Postado

Tho estudando alguns conceitos em C então fiz uma atividade que envolvesse operações com cilindro, o codigo compila mas quando chega na ultima linha para printar o resultado não acontece nada e o programa fecha. Alguem poderia analisar e conferir onde esta o erro? Agradeço desde ja

#define PI 3.14

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

typedef struct{
  float raio;
  float altura;
}cilindro;

void iniciar(cilindro *c,float r, float a){
    c->raio = r;
    c->altura = a;
}

  float area_base(cilindro *c){
      float ab =0;
      ab = PI*((*c).raio*(*c).raio);
      return ab;
  }

  float area_lateral(cilindro *c){
     float al =0;
     al = 2*PI*(c->raio*c->raio)*c->altura;
     return al;
  }

  float volume(cilindro *c){
     float v =0;
     v = PI*((*c).raio*(*c).raio)*(*c).altura;
     return v;
  }

  float area_total(cilindro *c){
    float at =0;
    at = area_base(&c);
    at += area_lateral(&c);
    return at;
  }

int main(){
    cilindro c;
    float raio=0,alt=0, resp=0;
    int e=0;
    float (*p[4])(float r, float a) = {area_base,area_lateral,volume,area_total};
    printf("Digite o raio e a altura:\n");
    scanf("%f%f", &raio, &alt);
    iniciar(&c,raio,alt);
    printf("Escolha uma operação de 0 a 3:\n");
    scanf("%d", &e);
    resp = p[e](raio,alt);
    printf("%f", resp);


   return 0;
}

 

Postado
 float area_total(cilindro *c){
    float at =0;
    //at = area_base(&c);
    //at += area_lateral(&c);
	at = area_base(c);
    at += area_lateral(c);
    return at;
  }
//float (*p[4])(float r, float a) = {area_base,area_lateral,volume,area_total};
 float (*p[4])(cilindro *c) = {area_base,area_lateral,volume,area_total};
    printf("Digite o raio e a altura:\n");
    scanf("%f%f", &raio, &alt);
    iniciar(&c,raio,alt);
    printf("Escolha uma operação de 0 a 3:\n");
    scanf("%d", &e);
    resp = (*p[e])(&c);
    printf("%f", resp);

   system("pause");
   return 0;
}

Encontrei estes erros no seu código.

  • Curtir 1
Postado
1 hora atrás, Flávio Pedroza disse:

 float area_total(cilindro *c){
    float at =0;
    //at = area_base(&c);
    //at += area_lateral(&c);
	at = area_base(c);
    at += area_lateral(c);
    return at;
  }
//float (*p[4])(float r, float a) = {area_base,area_lateral,volume,area_total};
 float (*p[4])(cilindro *c) = {area_base,area_lateral,volume,area_total};
    printf("Digite o raio e a altura:\n");
    scanf("%f%f", &raio, &alt);
    iniciar(&c,raio,alt);
    printf("Escolha uma operação de 0 a 3:\n");
    scanf("%d", &e);
    resp = (*p[e])(&c);
    printf("%f", resp);

   system("pause");
   return 0;
}

Encontrei estes erros no seu código.

Obrigado rodou tudo certo. Eu ainda me confudo de quando eu devo usar o & pra apontar pro endereço. Na instrução de alocar o valor no resp não teve diferença entre (*p[e])(&c) pra p[e](&c), (tirando a parte do parametro errado que ai eu deixei passar feio essa XD), e tambem na hora de declarar o ponteiro função eu passei float (*p[4])(c) e tambem não fez diferença, o que eh estranho porque eu declarei uma função com um nome de parametro sem um tipo.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!