Q:

Programa Ignorando o Scanf

Preciso criar um algoritmo como pedido abaixo, porém, toda vez que rodo o programa ele "pula" etapas. Por exemplo:
Quero que fique assim
Produto: "Batata"
Setor: "Comida"
Quantidade: "15"
Preço: "15.23"
Porém ele imprime na tela e ignora o scanf

Abaixo o exercício
Seja um algoritmo para controlar os produtos do estoque de um supermercado. Para
cada produto, tem-se os seguintes campos:

Nome: string de tamanho 15.
Setor: carater
Quantidade: inteiro
Preço: real //preço por unidade do produto

a) Escrever a definição da estrutura produto
b) Declarar o vetor estoque do tipo da estrutura definida acima, de tamanho 100 e global.
c) Crie um menu para:
c1. Definir um bloco de instruções para ler o vetor estoque.
c2.Definir um bloco de instruções que receba um setor e devolva o número de diferentes produtos desse setor.
c3. Definir um bloco de instruções que calcule e devolva o total de capital investido em produtos do supermercado.
c4.Sair do Programa.
//Controle Estoque de produtos de Supermercado
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

struct produto
{
    char nome[15];
    char setor[15];
    int quantidade;
    float preco;
};

struct produto prod[2];

int estoque(struct produto prod[2];)
{
    int i;
    for (i = 0;i < 2; i++)
    {
        printf("\nDigite o nome do produto: ");
        scanf("%s", &prod[i].nome);
        printf("\nDigite o setor: ");
        scanf("%c", &prod[i].setor);
        printf("\nDigite a quantidade: ");
        scanf("%d", &prod[i].quantidade);
        printf("\nDigite o preço: ");
        scanf("%f", &prod[i].preco);
    }
}

int verificar_setor(struct produto prod[2];)
{
    int i, p = 0;
    char ver[15];

    printf("\nDigite o setor: ");
    scanf("%c", &ver);
    for (i = 0;i < 2; i++)
    {
        if (strcpy(ver,prod[i].setor))
        {
            p++;
        }
    }
    printf("Existem %d produtos cadastrados neste setor.", p);
}

int capital(struct produto prod[2];)
{
    int i;
    float c = 0.0;

    for (i = 0;i < 2; i++)
    {
        c = c + prod[i].preco;
    }
    printf("Foi investido um total de %2.f Reais em produtos no Supermercado.", c);
}

int main()
{
    setlocale(LC_ALL,"Portuguese");
    int n = 0;
    printf("Escolha uma opção");
    do
    {
        printf("\n1 - Cadastrar produtos.");
        printf("\n2 - Verificar quantos produtos existem em um determinado setor.");
        printf("\n3 - Total de capital investido nos produtos do Supermecado.");
        printf("\n4 - Sair do Programa.\n");
        scanf("%d", &n);

        switch (n)
        {
            case 1:
                estoque(prod[2]);
                n = 0;
                break;

            case 2:
                verificar_setor(prod[2]);
                n = 0;
                break;

            case 3:
                capital(prod[2]);
                n = 0;
                break;

            case 4:
                printf("Pressione qualquer tecla para sair...");
                system("Pause");
                break;
        }
    }while (n == 0);

    return 0;
}

A:

Ás vezes fica uma espécie de "lixo" no buffer do teclado que é quando você aperta o enter, aí ao entrar no próximo scanf ele recebe esse enter novamente e pra ele é como se já tivesse inserido um valor, para resolver você pode usar essa linha antes do scanf fflush(stdin); (No windows, no Linux é outro comando, se não me engano) ou apenas dê um espaço dentro das aspas do scanf que também funciona: scanf(" %d", &seuInt);, por padrão eu sempre dou esse espaço dentro do scanf para não precisar usar o fflush, uso o fflush apenas antes de getchar()

