Ir ao conteúdo

Posts recomendados

Postado

eu declaro as funções para a struct porém quando eu chamo ela em outra função ela não vem com os valores que eu coloquei;

me ajudem por favor .

me ajudem a resolver esse problema . 

struct produtoc
 {
     char descricao[20];
     float valor;
     int cod,quant;
 };    


 int produtos_cadastros (){   

 

struct produtoc produtoc[10];


    (produtoc[0].cod =1);
     strcpy    (produtoc[0].descricao ,"liquigás");
    produtoc[0].valor = 60.00; 
    produtoc[0].quant=0;
    
    produtoc[1].cod =2;
     strcpy    (produtoc[1].descricao ,"Consigás");
    produtoc[1].valor = 58.00; 
    produtoc[1].quant=0;
    
    
    produtoc[2].cod =3;
     strcpy    (produtoc[2].descricao ,"Nacional Gás");
    produtoc[2].valor = 58.00; 
    produtoc[2].quant=0;

}
 void produtos_cadastrados (){
     
     int i;
     
     for (i=0;i<10;i++){
     
     printf("ID: %d \t \t%s \t%.2f\n",produtoc.cod,produtoc.descricao,produtoc.valor);
 }
 
 } // quando eu chamo essa função ela aparece valores zerados . 

Postado
/*  =========================================================================
    Linguagem:
     Programa:
         Data:
        Autor:
    =========================================================================  */

/*  INCLUDE */
/*  Incluir   com esta inclusão é possível usar */
#include <stdio.h>/* printf; puts; ... */


/*  DEFINE */
/*  Definir   macro customizado */
#define SIZEDB 10/* SIZEDB   tamanho máximo do banco de dados */

/*  ABSTRACT */
/*  Abstrato */
struct descricao_stt{/* descricao_stt   tém de caracteres 20 bytes */
  char string[ 20 ]; };

struct produtoc{/* produtoc  ... */
  struct descricao_stt descricao;
  int                  quantidade;
  int                  codigo;
  float                valor; };

/*  VARIABLE GLOBAL */
/*  Variáveis globais / Escopo de Programa / Públicas */
struct produtoc DBase[ SIZEDB ];/* DBase   Banco de Dados */

/*  ----------------------------------------------- PRODUTOS_CADASTROS ------  */
int produtos_cadastros( ){



    /* struct produtoc produtoc[10];

       [ ! ]A impressão é que produtoc é variável banco de Dados: Tipo de
       variável que serve para nomer banco de dados  interno ao programa.
       Para isso ser legal,  ela tem que ser acessível a todos os escopos
       / rotinas / funções.

       • Assim declaramos como pública no topo do Programa. */


    DBase[0].codigo    = 1;
    //strcpy(DBase[0].descricao ,"liquigás");
    DBase[0].descricao = *(struct descricao_stt *)"Liquigás";
    DBase[0].valor     = 60.00;
    DBase[0].quantidade= 0;

    DBase[1].codigo    = 2;
    //strcpy(DBase[1].descricao ,"Consigás");
    DBase[1].descricao = *(struct descricao_stt *)"Consigás";
    DBase[1].valor     = 58.00;
    DBase[1].quantidade= 0;

    DBase[2].codigo    = 3;
    //strcpy(DBase[2].descricao ,"Nacional Gás");
    DBase[2].descricao = *(struct descricao_stt *)"Nacional Gás";
    DBase[2].valor     = 58.00;
    DBase[2].quantidade= 0;
    return( 0 ); }

/*  --------------------------------------------- PRODUTOS_CADASTRADOS ------  */
void produtos_cadastrados( ){
  int i;

    for( i = 0; i < SIZEDB; i++ )
           { if( 0 != DBase[ i ].codigo )
                   printf( "ID: %d \t \t%s \t%.2f\n",
                             DBase[ i ].codigo,
                            &DBase[ i ].descricao,
                             DBase[ i ].valor ); }
                            return; }
// quando eu chamo essa função ela aparece valores zerados .

/*  ------------------------------------------------------------- MAIN ------  */
int main( void ){
    produtos_cadastros( );  /* chamar  produtos_cadastros */
    produtos_cadastrados( );/* chamar  produtos_cadastrados */
    return 0; }

[ ! ]Hints: a dica é; a atribuição de tipos abstratos via casting entre tipos. É interessante porque é prático, rápido e não existe risco conhecido, pois todos os bits da sequência são de acesso do programa.

 

:thumbsup:

produtoc.png

  • Curtir 1
Postado
Em 12/04/2018 às 16:57, albert igo disse:

struct produtoc
 {
     char descricao[20];
     float valor;
     int cod,quant;
 };    

Aqui você declarou o tipo struct produtoc. Até aqui, tudo bem....

 

Em 12/04/2018 às 16:57, albert igo disse:

int produtos_cadastros (){   

 

struct produtoc produtoc[10]

Aqui você criou uma função e declarou um array de 10 elementos que é local a essa função.

 

O problema está no trecho abaixo, que é outra função, onde a declaração da variável não aparece. A variável local que foi declarada na função anterior não vale mais aqui pois a variável não é global. ainda por cima, essa função está com o mesmo nome da anterior, overridando (?) a anterior.

 

 

Em 12/04/2018 às 16:57, albert igo disse:

 void produtos_cadastrados (){
     
     int i;
     
     for (i=0;i<10;i++){
     
     printf("ID: %d \t \t%s \t%.2f\n",produtoc.cod,produtoc.descricao,produtoc.valor);
 }
 
 } //

 

Além disso, os dados estão num vetor. Observe que voce faz um loop mas não indexa o vetor. O loop inclusive percorre 10 elemento no for porém apenas 3 elementos são carregados. 

 

Solução, reestruturar essas declarações assim

definição da struct ... como você fez

declaração da main () 

dentro da main, declara a variável array 

dentro da main, a funçào que obtem os dados. Essa função usará a variável array como se fora global

dentro da main, a função que exibe os dados. Usará variáveis globais do mesmo jeito.

Dentro da main, chame a função que carrega, depois chame a função que exibe

Tomei a liberdade de corrigir o programa 
https://repl.it/@bokomoko/exemplo-de-struct-com-declaracao-global

 

Dá uma olhada.

 

Postado

@albert igo Apareceu erro no programa?

Impossível! Eu testei agora mesmo o código do post #2 aquele que eu postei está operacional.

 

1 hora atrás, albert igo disse:

Muito Obrigado !!!!!!

:thumbsup:valeu!

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!