Ir ao conteúdo
  • Cadastre-se

C problema com funçao fgets -> ler de um ponteiro que aponta para um string


88games16

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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;
}

 

Link para o comentário
Compartilhar em outros sites

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...