29 - Funciones con retorno de un struct


Hemos visto que una función cuando no retorna dato definimos la palabra clave void previo al nombre de la función:

void cargar()

Cuando devuelve una función un tipo de dato simple puede ser un int, float o char:

int cargar()

En este concepto veremos que una función puede retornar un registro:

struct producto cargar()

Problema 1:

Se tiene la siguiente declaración de registro:

struct producto {
    int codigo;
    char descripcion[41];
    float precio;
}; //obligatorio el punto y coma

Plantear dos funciones una que cargue un registro de tipo producto y otra que lo imprima.

En la función main definir dos variables de tipo producto llamar a las funciones anteriores.

Programa: programa135.c

Ver video

#include<stdio.h>
#include<conio.h>

struct producto {
    int codigo;
    char descripcion[41];
    float precio;
};

struct producto cargar()
{
    struct producto pro;
    printf("Ingrese el codigo de producto:");
    scanf("%i",&pro.codigo);
    fflush(stdin);
    printf("Ingrese la descripcion:");
    gets(pro.descripcion);
    printf("Ingrese el precio:");
    scanf("%f",&pro.precio);
    return pro;
};

void imprimir(struct producto pro)
{
    printf("Datos del producto.\n");
    printf("Codigo del producto:%i\n",pro.codigo);
    printf("Descripcion:%s\n",pro.descripcion);
    printf("precio:%0.2f\n",pro.precio);
}

int main()
{
    struct producto pro1,pro2;
    pro1=cargar();
    pro2=cargar();
    imprimir(pro1);
    imprimir(pro2);
    getch();
    return 0;
}

En la función main definimos dos variables de tipo producto:

int main()
{
    struct producto pro1,pro2;

Seguidamente llamamos a la función cargar y le asignamos a cada registro el dato que retorna la función:

    pro1=cargar();
    pro2=cargar();

La función cargar define una variable local de tipo producto y se cargan los datos por teclado y luego mediante el comando return devuelve a la main el valor de la variable local:

struct producto cargar()
{
    struct producto pro;
    printf("Ingrese el codigo de producto:");
    scanf("%i",&pro.codigo);
    fflush(stdin);
    printf("Ingrese la descripcion:");
    gets(pro.descripcion);
    printf("Ingrese el precio:");
    scanf("%f",&pro.precio);
    return pro;
};

Tener en cuenta que en la main se hace una copia de la variable local devuelta por la función por lo que no se pierden los datos cargados por teclado:

    pro1=cargar();

Problema propuesto

Solución
programa136.c

#include<stdio.h>
#include<conio.h>

struct punto {
    int x;
    int y;
};


struct punto cargar()
{
    struct punto p;
    printf("Ingrese la coordenada x del punto:");
    scanf("%i",&p.x);
    printf("Ingrese la coordenada y del punto:");
    scanf("%i",&p.y);
    return p;
};

void imprimirCuadrante(struct punto p)
{
    if (p.x>0 && p.y>0)
    {
        printf("La coordenada(%i,%i) se encuentra en el primer cuadrante",p.x, p.y);
    }
    else
    {
        if (p.x<0 && p.y>0)
        {
            printf("La coordenada(%i,%i) se encuentra en el segundo cuadrante",p.x, p.y);
        }
        else
        {
            if (p.x<0 && p.y<0)
            {
                printf("La coordenada(%i,%i) se encuentra en el tercer cuadrante",p.x, p.y);
            }
            else
            {
                if (p.x>0 && p.y<0)
                {
                    printf("La coordenada(%i,%i) se encuentra en el cuarto cuadrante",p.x, p.y);
                }
            }
        }
    }
    printf("\n");
}


int main()
{
    struct punto p1,p2,p3;
    p1=cargar();
    p2=cargar();
    p3=cargar();
    imprimirCuadrante(p1);
    imprimirCuadrante(p2);
    imprimirCuadrante(p3);
    getch();
    return 0;
}

Retornar