Ir ao conteúdo

Posts recomendados

Postado

Boa tarde pessoal sou novo com programação estou com problema no programa na função preenche_produtos na hora de ler o nome do produto da erro

#include <stdio.h>
#include <string.h>
 
struct Fornecedor {
    int id;
    char cia[20];
};
 
struct Produto{
 
    char nome[20];
    int  qtd;
    int custo;
    int venda;
    int valorc;
    struct Fornecedor f;
 
};
 
struct Fornecedor fornecedores[100];
struct Produto produtos[100];
 
 
void quebra_linha(){
    printf("\n");
}
//preencher dados dos fornecedores
void preenche_fornecedor (struct Fornecedor *p){
    printf("\ncodigo do fornecedor: ");
    scanf ("%d", &((*p).id));
        printf("nome da empresa: ");
       scanf("%s",p->cia);
}

// preenche produtos
void preenche_produtos (struct Produto *p){
 
    preenche_fornecedor(&(*p).f);    
    printf ("informe o produto p/ cadastrar no estoque: ");
    getchar();
    fgets ((&(*p.nome),20,stdin);
    printf ("informe a quantidade da compra: ");
    scanf("%d",&p->qtd);
    printf("informe o preço unitario: ");
    scanf("%d",&p->custo);
    p->valorc=p->custo*p->qtd;
    printf("valor da mercadoria no estoque %d: ",p->valorc);
    p->venda = p->valorc*1.4;
        
}

 
 
int main(){
     
        printf (" --------------ESTOQUE EMPRESA ABC--------------\n");
        quebra_linha();
    int opcao;
    printf("Menu:\n");
    printf("1 - Consultar estoque cadastrado: \n");
    printf("2 - Consultar lista de fornecedores cadastrados: \n");
    printf("3 - Cadastrar novo item no estoque: \n");
    printf("4 - Cadastrar novo fornecedor: \n");  
    
    scanf("%d",&opcao);

 

  • Curtir 1
Postado

Problema de consistência. Para que não me confunda as nomenclaturas tendo o máximo seguir apenas um paradigma, nunca mais que 1. Então, se seguir esse conselho também não se confundirá nunca. A partir de agora use sempre (->) operador unário para referencias ponteiro nas estruturas e seus membros, sempre.

 

// preenche produtos
void preenche_produtos (struct Produto *p){
    preenche_fornecedor (&p->f);

    printf ("informe o produto p/ cadastrar no estoque: ");
    fgets (p->nome, 20, stdin);

    printf ("informe a quantidade da compra: ");
    scanf ("%d", &p->qtd);

    printf ("informe o preτo unitario: ");
    scanf ("%d", &p->custo);

    p->valorc =  p->custo * p->qtd;

    printf ("valor da mercadoria no estoque %d: ", p->valorc);
    p->venda =  p->valorc * 1.4; }

 

 

Ok! tchau.

  • Curtir 1
Postado

Valeu obrigado mas por alguma razão não compila direito quando uso o fgets acabei tendo que usar a scanf  duvida no código abaixo faço o cadastro dos fornecedores condigo listar eles na tela porém na hora de fazer do estoque da erro não sei se é na hora de criar o arquivo ou na hora de ler que tem algo errado 

se alguem puder ajudar fico grato

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
void menu();
void opcao_menu();
void visualizar_fornecedor();
void inputEstoque();
void visualizar_Estoque();



struct Fornecedor {
    char cod[2];
    char cnpj[15];
    char cia[20];
    
};
 
struct Produto{
    struct Fornecedor f;
    char nome[20];
    int  qtd;
    int custo;
    int valorc;    
    int venda;
};
 
struct Fornecedor fornecedores;
struct Produto produtos;
 
void quebra_linha(){
    printf("\n");
}


//preencher fornecedores
void preenche_fornecedor (struct Fornecedor *p){

    fflush(stdin);
    printf("\ncodigo do fornecedor: ");
    scanf ("%s", p->cod);
    fflush(stdin);
    printf("\ninforme cnpj do fornecedor: ");
    scanf("%s",p->cnpj);
    fflush(stdin);
    printf("\nnome da empresa: ");
    scanf("%s",p->cia);
}



void preenche_produtos (struct Produto *p){
    preenche_fornecedor(& p->f);    
    printf ("informe o produto p/ cadastrar no estoque: ");
    scanf("%s",p->nome);
    printf ("informe a quantidade da compra: ");
    scanf("%d",&p->qtd);
    printf("informe o preço unitario: ");
    scanf("%d",&p->custo);
    p->valorc=p->custo*p->qtd; // preço pago pelo pela quantidade comprada
    printf("valor da mercadoria no estoque %d: ",p->valorc);
    p->venda = (p->valorc*1.4) - (p->valorc) ;// lucro esperado com a venda
    
 }

// cadastrar fornecedor
void inputFornecedor(){
    system("clear");
    struct Fornecedor fornecedores;
    
    char resp;
    FILE* f;
    f = fopen("fornecedores.txt", "ab");
    do
    {
        preenche_fornecedor(&fornecedores);
        fwrite(&fornecedores, sizeof(struct Fornecedor), 1, f);
   
        printf("gostaria de cadastrar outro fornecedor (s/n) ? \n");
        getchar();
        scanf("%c",&resp);
        
    }while(resp =='s');
    fclose(f);
    system("clear");
    menu();
}



void visualizar_fornecedor(){ // lista os fornecedores cadastrados
    system("clear");
    struct Fornecedor fornecedores;
        
    FILE* f;
    f = fopen("fornecedores.txt", "rb");
    while (fread(&fornecedores, sizeof(struct Fornecedor), 1, f)==1){
        printf("---------------------------------------------");
        quebra_linha();            
        printf("Codigo de registro: %s\n", fornecedores.cod);
        printf("Cnpj: %s\n", fornecedores.cnpj);
        printf("Empresa %s\n", fornecedores.cia);
        printf("---------------------------------------------");
        quebra_linha();    
    }        
    fclose(f);
    getchar();
    getchar();
    menu();
}
void inputEstoque(){ //cadastrar o estoque
    char resp;    
    system("clear");
    struct Produto produtos;
    FILE* f;
    f = fopen("estoque.txt", "ab");
    do
    {
    preenche_produtos (&produtos);
    fwrite(&fornecedores, sizeof(struct Produto), 1, f);
    quebra_linha();    
    printf("gostaria de cadastrar outro produto (s/n) ? \n");
    getchar();
    scanf("%c",&resp);
        
    }while(resp =='s');
    fclose(f);
    system("clear");
    menu();

}
void visualizar_Estoque(){ // listar estoque cadastrado
    system("clear");
    struct Produto produtos;
        
    FILE* f;
    f = fopen("estoque.txt", "rb");
    while (fread(&fornecedores, sizeof(struct Produto), 1, f)==1){
        printf("---------------------------------------------");
        quebra_linha();            
        printf("Codigo de registro: %s\n", produtos.f.cod);
        printf("Cnpj: %s\n", produtos.f.cnpj);
        printf("Empresa %s\n", produtos.f.cia);
        printf ("Produto %s\n", produtos.nome);
        printf ("Quantidade %d\n", produtos.qtd);
        printf("preco unidade %d\n", produtos.custo);
        printf(" valor do estoque %d\n", produtos.valorc);    
         printf("lucro esperado %d\n", produtos.venda);
        printf("---------------------------------------------");
        quebra_linha();    
    }        
    fclose(f);
    getchar();
    getchar();
    menu();
}
// menu
void menu (){
    system("clear");
        printf (" --------------ESTOQUE EMPRESA ABC--------------\n");
        quebra_linha();
    printf("Menu:\n");
    printf("4 - Consultar estoque cadastrado: \n");
    printf("2 - Consultar fornecedores cadastrados: \n");
    printf("3 - Cadastrar novo item no estoque: \n");
    printf("1 - Cadastrar novo fornecedor: \n");
    printf("5 - sair\n");
    opcao_menu();  
}
void opcao_menu(){
    int opcao;
    
    scanf("%d",&opcao);
    while(opcao <1 || opcao>5){
        printf("opcao nao disponivel no menu\n");
        printf("digite o menu que deseja acessar: \n");
        scanf("%d",&opcao);
    }
    switch (opcao){
        case 1:
            getchar();
            inputFornecedor();
        break;
        
        case 2:
            visualizar_fornecedor();
        break;
        
        case 3:
            inputEstoque();    
        break;
        
        case 4:
            visualizar_Estoque();
        break;
        
        default:    
            printf("valor invalido");

    }
}
int main(){
     menu();    
     
       return 0;
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!