Olá tenho tido problemas com a compilação no programa abaixo em C, ele é um programa que faz o cadastro de produtos de uma loja, quando recebe uma proposta, faz a busca do produto no estoque, verificando se o pedido pode ser atendido e caso haja produtos suficientes ele desconta do estoque a quantidade comprada pelo cliente, além de atualizar o estoque(colocar mais produtos no estoque). Programo em linux pelo gcc e tem dado o seguinte problema: ex23-lista2.c: Na função ‘le_pedido’: ex23-lista2.c:80:3: aviso: formato ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[51]’ [-Wformat] O erro está na função le_pedido após a main. #include <stdio.h>
#define TAM 1000
#define NOME 51
typedef struct {
int codigo_produto;
int quantidade_disponivel;
float preco_unitario;
char nome[NOME];
char marca[NOME];
} produto;
typedef struct {
int codigo;
int quantidade;
char cliente[NOME];
} pedido;
void cadastrar_produto(produto v[TAM], int *n);
void executa_venda(pedido p, produto v[TAM], int n);
int verifica_estoque(pedido p, produto v[TAM], int n);
void atualizar_estoque(produto vet[TAM], int n);
void le_pedido(pedido *proposta);
int main ()
{
int n=0, opcao, resp;
produto v[TAM];
pedido proposta;
do {
printf("1 - Cadastrar produto\n");
printf("2 - Solicitar produtos\n");
printf("3 - Atualizar Estoque\n");
printf("4 - Sair\n");
scanf("%d\n", &opcao);
if(opcao == 1)
cadastrar_produto(v, &n);
else if(opcao == 2){
le_pedido(&proposta);
resp=verifica_estoque(proposta, v, n);
if(resp == -1)
printf("Produto não existe\n");
else if(resp == -2)
printf("Quantidade insuficiente\n");
else
executa_venda(proposta, v, resp);
}
else if(opcao == 3){
atualizar_estoque(v, n);
}
}while(opcao != 4);
return 0;
}
void cadastrar_produto(produto v[TAM], int *n)
{
v[*n].codigo_produto=*n;
scanf("%[^\n]", v[*n].nome);
scanf("%[^\n]", v[*n].marca);
scanf("%f", &v[*n].preco_unitario);
scanf("%d", &v[*n].quantidade_disponivel);
(*n)++;
}
int verifica_estoque(pedido proposta, produto v[TAM], int n)
{
int i;
for(i=0; i<n; i++){
if(proposta.codigo==v[i].codigo_produto){
if(proposta.quantidade<=v[i].quantidade_disponivel)
return i;
else
return -2;
}
}
return -1;
}
void le_pedido(pedido *proposta)
{
scanf("%d", &(*proposta).codigo);
scanf("%d", &(*proposta).quantidade);
scanf(" %s", &(*proposta).cliente);
}
void executa_venda(pedido p, produto v[TAM], int i)
{
if(v[i].codigo_produto==p.codigo){
printf("%s\n", p.cliente);
printf("%d\n", p.codigo);
printf("%s\n", v[i].nome);
printf("%.2f\n", v[i].preco_unitario);
printf("%.2f\n", (v[i].preco_unitario*p.quantidade));
v[i].quantidade_disponivel-=p.quantidade;
}
}
void atualizar_estoque (produto v[TAM], int n)
{
int cod, qtde, i;
scanf("%d", &cod);
scanf("%d", &qtde);
for(i=0; i<n; i++){
if(cod==v[i].codigo_produto)
v[i].quantidade_disponivel+=qtde;
}
}