Ir ao conteúdo
  • Cadastre-se
albert igo

C Alguém para me informar esse erro !!

Recommended Posts

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 . 

Compartilhar este post


Link para o post
Compartilhar em outros sites
/*  =========================================================================
    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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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!

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





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×