Why is the output value of half incorrect?

Asked

Viewed 31 times

0

Hello, the output that shows the value of the variable half appears to be an address instead of the value float, I cannot identify the error, someone can explain me?


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

struct calculos
{
    int numero;
    int quadrado;
    float metade;
};

struct calculos * subrotina(int n) //calculos = tipo de retorno
{
    struct calculos * dados = (struct calculos*)malloc(sizeof(struct calculos)); //ALOCAÇÃO DINÂMICA //QUESTÃO 3
    dados -> numero = n; //QUESTÃO 3
    dados -> quadrado = n*n; // "->" significa recebe //QUESTÃO 3
    dados->metade = n/2.0;
    return dados;
};

int main(void)
{
    int numero;
    int contDados = 0;
    int tamanho = 5;
    struct calculos * retorno; //QUESTÃO 3
    struct calculos * vetorCalculos = (struct calculos*)malloc(sizeof(struct calculos)*(contDados+tamanho));
    struct calculos * vetorCalculosTemp;
    
    do{
        
        printf("Informe um valor: ");
        scanf("%d", &numero);
        
        if(numero>0)
        {   
            contDados++;
            if(contDados%tamanho == 0)
            {
                //QUESTÃO 4
                vetorCalculosTemp = (struct calculos*)malloc(sizeof(struct calculos)*(contDados+tamanho));
                printf("ALOCOU!\n");
                for(int contTemp=0; contTemp<=contDados; contTemp++)
                {
                    vetorCalculosTemp[contTemp].numero = vetorCalculos[contTemp].numero;
                    vetorCalculosTemp[contTemp].quadrado = vetorCalculos[contTemp].quadrado;
                    vetorCalculosTemp[contTemp].metade = vetorCalculos[contTemp].metade;
                }
                free(vetorCalculos);
                vetorCalculos = vetorCalculosTemp;
            }
            retorno = subrotina(numero); //QUESTÃO 3
            vetorCalculos[contDados-1].numero = retorno->numero;
            vetorCalculos[contDados-1].quadrado = retorno->quadrado;
            vetorCalculos[contDados-1].metade = retorno->metade;
        }
    }while(numero > 0);
    
    printf("\nMostrando calculos:\n");
    printf("\nDobro:\n");
    for(int pos = 0; pos <= contDados; pos++)
    {
        printf("%d ", vetorCalculos[pos].numero);
        printf("%d \n", vetorCalculos[pos].quadrado);
    }
    printf("\nMetade:\n");
    for(int pos = 0; pos <= contDados; pos++)
    {
        printf("%d ", vetorCalculos[pos].numero);
        printf("%d \n", vetorCalculos[pos].metade);
    }
    
    return 0;
}
  • If metade is a float then you should use %f in function printf.

1 answer

0

As stated at the very beginning of the question its half variable is a Float due to this when you use a printf you need to reference to variavel like float, so would be printf("%f \n", vetorCalculos[pos].metade); Thus remaining the final code:

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

struct calculos
{
    int numero;
    int quadrado;
    float metade;
};

struct calculos * subrotina(int n) //calculos = tipo de retorno
{
    struct calculos * dados = (struct calculos*)malloc(sizeof(struct calculos)); //ALOCAÇÃO DINÂMICA //QUESTÃO 3
    dados -> numero = n; //QUESTÃO 3
    dados -> quadrado = n*n; // "->" significa recebe //QUESTÃO 3
    dados->metade = n/2.0;
    return dados;
};

int main(void)
{
    int numero;
    int contDados = 0;
    int tamanho = 5;
    struct calculos * retorno; //QUESTÃO 3
    struct calculos * vetorCalculos = (struct calculos*)malloc(sizeof(struct calculos)*(contDados+tamanho));
    struct calculos * vetorCalculosTemp;
    
    do{
        
        printf("Informe um valor: ");
        scanf("%d", &numero);
        
        if(numero>0)
        {   
            contDados++;
            if(contDados%tamanho == 0)
            {
                //QUESTÃO 4
                vetorCalculosTemp = (struct calculos*)malloc(sizeof(struct calculos)*(contDados+tamanho));
                printf("ALOCOU!\n");
                for(int contTemp=0; contTemp<=contDados; contTemp++)
                {
                    vetorCalculosTemp[contTemp].numero = vetorCalculos[contTemp].numero;
                    vetorCalculosTemp[contTemp].quadrado = vetorCalculos[contTemp].quadrado;
                    vetorCalculosTemp[contTemp].metade = vetorCalculos[contTemp].metade;
                }
                free(vetorCalculos);
                vetorCalculos = vetorCalculosTemp;
            }
            retorno = subrotina(numero); //QUESTÃO 3
            vetorCalculos[contDados-1].numero = retorno->numero;
            vetorCalculos[contDados-1].quadrado = retorno->quadrado;
            vetorCalculos[contDados-1].metade = retorno->metade;
        }
    }while(numero > 0);
    
    printf("\nMostrando calculos:\n");
    printf("\nDobro:\n");
    for(int pos = 0; pos <= contDados; pos++)
    {
        printf("%d ", vetorCalculos[pos].numero);
        printf("%d \n", vetorCalculos[pos].quadrado);
    }
    printf("\nMetade:\n");
    for(int pos = 0; pos <= contDados; pos++)
    {
        printf("%d ", vetorCalculos[pos].numero);
        printf("%f \n", vetorCalculos[pos].metade);
    }
    
    return 0;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.