Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

Editado por AnsiC
code: adicionar main e exemplo; documentação; dica
  • 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

@Boko Moko @AnsiC

Citação

apareceu esse erro no meu programa .

 [Error] a function-definition is not allowed here before '{' token

Muito Obrigado !!!!!!

 

Editado por albert igo

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






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

×