Ir para conteúdo
adrianoasg

Iniciante em C uso de struct dúvidas

Recommended Posts

Sou novo aqui no Imasters, estou precisando de ajuda. Fiz o código abaixo usando uma struct Produto, o programa já inclui, lista, altera, busca e exclui os produtos cadastrados. Até ai funciona, agora preciso modifica-lo e incluir um carrinho...

preciso fazer uma struct carrinho:

struct Produto{
int codigo;
char descricao[51];
float valor;
} vprodutos[10];

struct Carrinho{

int item;

struct Produto produto;

int qtd;

float Subtotal;

float total;

} carrinho[100];

como passo os dados da struct produto para o carrinho???

uma parte do código feito :

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

struct Produto{
int codigo;
char descricao[51];
float valor;
} vprodutos[10];

void incluir();
void excluir(int codigo);
void listar();
void alterar(int coidgo);
void buscar(int codigo);

int posicao;

int main()
{
posicao = 0;
int opc, codigo;

do{
system("cls");
printf("\t\tMenu Principal\n\n");
printf("\t\t1...Incluir Produto\n");
printf("\t\t2...Buscar Produto\n");
printf("\t\t3...Listar Todos\n");
printf("\t\t4...Alterar Produto\n");
printf("\t\t5...Excluir Produto\n");
printf("\t\t9...Sair\n\n");
printf("\t\tSua opcao: ");
scanf("%d", &opc);

switch(opc){
case 1:
incluir();
break;
case 2:
printf("Digite o codigo do produto a ser procurado: \n");
scanf("%d", &codigo);
buscar(codigo);
break;
case 3:
listar();
break;
case 4:
printf("Digite o codigo do produto a ser alterado: \n");
scanf("%d", &codigo);
alterar(codigo);
break;
case 5:
printf("Digite o codigo do produto a ser excluido: \n");
scanf("%d", &codigo);
excluir(codigo);
break;
case 9:
printf("FIM \n");
break;
default:
printf("Opcao invalida\n");
system("pause");
}
}while(opc!=9);

return 0;
}

int posicao;

void incluir(){
system("cls");

if(posicao < 10){
printf("Digite o codigo do produto: \n");
scanf("%d", &vprodutos[posicao].codigo);
fflush(stdin);
printf("Digite a descricao do produto: \n");
gets(vprodutos[posicao].descricao);
printf("Digite o valor do produto: \n");
scanf("%f", &vprodutos[posicao].valor);
printf("Cadastro efetuado com sucesso!!!\n");
posicao++;
}else{
printf("Memoria cheia!!!\n");
}
system("pause");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estamos tratando de estrutura aninhada (caso queira aprofundar nas pesquisas).

Para acessar cada membro de uma estrutura, você deve colocar na instrução a variável, ponto '.', membro da estrutura. Conforme você fez aqui:

scanf("%d", &vprodutos[posicao].codigo);

O mesmo serve para "estruturas de estrutura", é como se fosse uma caixa dentro de outra, ou, analogamente, um if dentro de um if, "você precisar entrar em um para poder entrar em outro". Tem que abrir a primeira para depois abrir a segunda. Para o seu código seria algo mais ou menos assim:

carrinho[i].produto[j].codigo = vprodutos[i].codigo;

abre a struct carrinho[] -> abre a struct produto -> abre o membro código.

Lembre-se que struct é um tipo de variável também, como int, float, char. Isto quer dizer que o "tratamento" em instruções é basicamente igual, a diferença é que no struct você tem membros a acessar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um carrinho é um vetor de produtos e nesse caso consequentemente um vetor de estruturas Produto.  Por exemplo, um carrinho com a capacidade de guardar 100 produtos é: 

Produto carrinho [100];

então nesse caso para cada produto colocado dentro do carrinho vai ser utilizado 1 posição do vetor. As posições não utilizadas do vetor carrinho significam o espaço vazio dentro do carrinho que ainda pode ser utilizado para se colocar produtos. Se todas as posições do vetor carrinho estão ocupadas significa que não há mais espaço dentro do carrinho. Essa é uma das formas de se fazer uma variável do tipo carrinho mas outra é fazer o carrinho sendo uma estrutura com uma variável que irá contar a quantidade de um determinado produto que há dentro dele:

struct Produtos_no_carrinho{
  Produto produto;
  int quantidade;
}carrinho[100];

Nesse último caso não há a necessidade de se usar 1 posição a mais do vetor carrinho para cada unidade a mais de um mesmo produto que houver dentro dele, apenas aumenta-se o valor da variável quantidade, ao contrário da maneira anterior aonde a quantidade não é especificada. Quando em determinada posição do vetor carrinho a quantidade de produtos for zero isso significa que aquele espaço do carrinho está vazio e pode ser colocado produtos nele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.