Ir para o conteúdo
sapires

Inicializar valores de uma estrutur

Mensagens Recomendadas

sapires

Tenho o seguinte programa:

typedef struct moedas{
int moeda50;
int moeda20;
int moeda10;
int moeda5;
int moeda1;
} TROCO;         
            
    
int main()                                                                      //Função MAIN
{
    struct moedas troco;                                                        //Moedas todas a zero
    troco.moeda50=1;
    troco.moeda20=1;
    troco.moeda10=1;
    troco.moeda5=1;
    troco.moeda1=1;
    (...)
}

Mas nao me inicializa as moedas todas a 0... pk?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Flinger

struct moedas troco;

Isto apenas te reserva memória, não te limpa a mesma. Nada te garante que essa memória reservada esteja a 0's. Estará sim com os valores que tenham sido escritos lá, antes de o teu programa correr e a utilizar.

Se a quiseres colocar a 0, ou pões campo a campo, ou usas o memset() ou o bzero();

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sapires

mas campo a campo nao é como eu fiz?

struct moedas troco;                                                   

    troco.moeda50=1;

    troco.moeda20=1;

    troco.moeda10=1;

    troco.moeda5=1;

    troco.moeda1=1;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sapires

tens razao  :cheesygrin: mas foi para exprimentar outro valor, mas nem o 0 nem o 1 fica devenido, dp invoco as moedas noutra funçao e aparecem me numero mto grandes.....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sapires
typedef struct moedas{
int moeda50;
int moeda20;
int moeda10;
int moeda5;
int moeda1;
} TROCO;

int main()                                                                      //Função MAIN
{
    struct moedas troco;                                                        //Moedas todas a zero
    troco.moeda50=0;
    troco.moeda20=0;
    troco.moeda10=0;
    troco.moeda5=0;
    troco.moeda1=0;
    fflush(stdin);
    GerirTroco(float acumulado);
}

void GerirTroco(float acumulado){
                                 struct moedas troco;
                                 fflush(stdin);
                                 printf("%d\n",troco.moeda1);                           [b][i][u]Aki é onde me da um valor todo marado[/u][/i]
                                 system("pause");
                                 }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cr4zYPT

E era de esperar, nao tas a passar a struct inicializada para a funçao.

Aqui tens o codigo com 3 diferenças

typedef struct moedas{
int moeda50;
int moeda20;
int moeda10;
int moeda5;
int moeda1;
} TROCO;

int main()                                                                      //Função MAIN
{
    struct moedas troco;                                                        //Moedas todas a zero
    troco.moeda50=0;
    troco.moeda20=0;
    troco.moeda10=0;
    troco.moeda5=0;
    troco.moeda1=0;
    fflush(stdin);
    GerirTroco(troco);  //alterei aqui o parametro k mandas
}
void GerirTroco(TROCO troco) // alterei aqui os parametros que recebe
{
                                // struct moedas troco;   nao inicializes outra vez
                                 fflush(stdin);
                                 printf("%d\n",troco.moeda1);                           
                                 system("pause");
                                 }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Flinger

void GerirTroco(float acumulado){
                                 struct moedas troco;
                                 fflush(stdin);
                                 printf("%d\n",troco.moeda1);                           Aki é onde me da um valor todo marado
                                 system("pause");
                                 }

Ai ai, as bases. A variável troco uqe tás a usar não é a mesma que tu inicializas na main... Estás a declarar uma struct moedas troco na tua função, logo isso é uma variável completamente diferente. Para usares a mesma que na main tens de a passar como parâmetro:

void GerirTroco(float acumulado,struct modeas troco){
fflush(stdin);
printf("%d\n",troco.moeda1);                           
system("pause");
}

Na main:

GerirTroco(float acumulado,troco);

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

procura na net sobre "scope" ...

resumindo :

tudo que é declarado dentro de '{' e '}' não tem significado fora desses '{' e '}'


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sapires

Mas assim da me vários erros!!!

void GerirTroco(TROCO troco);

typedef struct moedas{
int moeda50;
int moeda20;
int moeda10;
int moeda5;
int moeda1;
} TROCO;

            
    
int main()                                                                      //Função MAIN
{
    struct moedas troco;                                                        //Moedas todas a zero
    troco.moeda50=0;
    troco.moeda20=0;
    troco.moeda10=0;
    troco.moeda5=0;
    troco.moeda1=0;
    fflush(stdin);
    void GerirTroco(TROCO troco);
}

void GerirTroco(TROCO troco){
                                 printf("\n\nTem as seguintes moedas na maquina:\n\n\t1 Euro=%d\n\t50 Cent=%d\n\t20Cent=%d\n\t10Cent=&d\n\t5Cent=%d\n\n",troco.moeda1,troco.moeda50,troco.moeda20,troco.moeda10,troco.moeda5);
                                 system("pause");
                                 }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Descubra as diferencas :-)

void GerirTroco(TROCO troco);                /* 1 */
void GerirTroco(TROCO troco) { /* ... */ }   /* 2 */
TROCO x = {0}; GerirTroco(x);                /* 3 */

em /* 1 */ esta uma declaracao: desde que o compilador ve a declaracao sabe como ha-de construir o codigo maquina para executar a funcao

em /* 2 */ esta uma definicao: ao contrario da declaracao tem de ser unica no programa. Nesta definicao especifica-se o que a funcao faz

em /* 3 */ esta uma execucao: aqui a funcao e executada e os passos especificados na definicao sao executados.

No teu codigo nao tens nenhuma chamada a funcao (nenhum /* 3 */).


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sapires

por exemplo:

tenho esta estrutura:

struct moedas{
int moeda50;
int moeda20;
int moeda10;
int moeda5;
int moeda1;
};

tenho de a usar nesta estrutura recebendo tambem um valor acumulado:

void GerirTroco(float acumulado, struct moedas troco){
                                (...)
                                 }

para invocar esta funçoes em outra funçao usei :

GerirTroco(acumulado,struct moedas)

mas da-me erro ao compilar....

podem me ajudar porque?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

"struct moedas" é o nome da struct e respectiva keyword. O que tens de passar à função é uma variável desse tipo, por exemplo, troco.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.