Q:

Imprimir e receber valores de Struct de Vetores em uma função

Procurei em diversos lugares sobre isso mas não achei nenhuma resposta correta, queria saber o método correto de preencher um vetor de estrutura passada por referência pra uma função e depois imprimir em outra, nesse código embaixo eu tentei fazer algo do tipo pra tentar preencher mas não deu certo, obrigado desde já.
#include <stdio.h>

struct carnaval
{
        char nome [10];
        char cor [10];
        int quantidade;
};

int main ()
{
        int x=1;

        struct carnaval blocos[2];
        void listar();
        void incluir();
        void buscar();

        while (x!=0)
        {

                printf ("1) Incluir\n");
                printf ("2) Listar\n");
                printf ("3) Buscar\n");
                printf ("0) Sair\n");

                scanf ("%d", &x);

                if (x==0)
                {
                        break;
                }
                switch (x)
                {
                        case 1:
                        incluir (blocos);
                        break;
                        case 2:
                        listar (blocos);
                        break;
                        case 3:
                        buscar ();
                        break;
                        case 0:
                        break;
                        default:
                        printf ("valor inválido\n");
                        break;
                }
        }
}

void incluir (struct carnaval *incluido[])
{
        int i;
        for (i=0; i<2; i++)
        {
                getchar();
                fgets ((*incluido)[i].nome, 10, stdin);
                fgets ((*incluido)[i].cor, 10, stdin);
                scanf ("%d", &(*incluido)[i].quantidade);
        }

}

void listar (struct carnaval print[])
{
        int y;

        for (y=0; y<2; y++)
        {
                printf ("\n%s", print[y].nome);
                printf ("%s", print[y].cor);
                printf ("%d\n\n", print[y].quantidade);
        }
}

void buscar ()
{
        printf ("teste\n");
}

A:

O seu código tem alguns erros. O primeiro deles é que quando se deseja passar um vetor como parâmetro de uma função, a sintaxe do tipo void incluir (struct carnaval *incluido[]) pode ser utilizada quando se trabalha com um vetor bidimensional.
Por outro lado, quando se trabalha com vetores unidimensionais, que é o seu caso, deve-se declarar como parâmetro ou um vetor (unidimensional), e.g. struct carnaval incluido[], ou um ponteiro, e.g. struct carnaval *incluido.
A forma que você acessa os dados de incluido também está equivocada. Por exemplo, no lugar de (*incluido)[i].nome, você deveria ter escrito somente incluido[i].nome. Quanto a isso, lembre-se que vetores já são passados por referência e que [i] é o suficiente para acessar o conteúdo do array na posição i.
Dito isso, segue a função void incluir() com as correções dos erros apontados:
void incluir (struct carnaval incluido[])
{
        int i;
        for (i=0; i<2; i++)
        {
               getchar();
               fgets (incluido[i].nome, 10, stdin);
               fgets (incluido[i].cor, 10, stdin);
               scanf ("%d", &incluido[i].quantidade);
        }

}

