Jump to content

[Resolvido] Valor Apontador


_Rest_
 Share

Recommended Posts

Boas, alguém me consegue explicar porque é que o valor do apontador passa a ser a referencia depois da linha de codigo comentada com ***

void escreverOrdem()
{
 int fluenciaOrdens,wrf,numero;
 srand(time(NULL));
 char fifo[10];
 char buffer[10];
 char string [10];

 struct ordem
 {
   int ID_Corretor, ID_Titulo, Quantidade;
   float Preco;
 }*Ordem;

 do{
   buffer[0]=0;

   fluenciaOrdens=rand() % 5 + 1; // fluencia de entrada de ordens compra/venda

   Ordem->ID_Corretor=rand()%49 + 1; //gerar ID's
   Ordem->Quantidade=rand() % 99 + 1; //Quantidade aleatoria de ordens
   Ordem->Preco=rand() % 25 - 10;

   sleep(fluenciaOrdens);
   int numero = rand() % 3 + 1;
   printf("Apareceu a ordem %d na entrada %d\n",&Ordem->ID_Corretor,numero); // Este é só para testar até onde dá o valor correcto
   snprintf(fifo, sizeof(fifo), "entrada%d",numero); // A partir daqui passa a dar a referencia
   printf("Apareceu a ordem %d na entrada %d\n",&Ordem->ID_Corretor,numero);
   wrf= open(fifo, O_RDWR);
   sprintf(string,"%d",Ordem->Quantidade);
   strcat(buffer,string);
   write(wrf,buffer, strlen(buffer));

 }while(1);
}

Na consola aparece isto:

Apareceu a ordem 31 na entrada 3

Apareceu a ordem 1852112927 na entrada 3

Apareceu a ordem 58 na entrada 1

Apareceu a ordem 1852112954 na entrada 1

Link to comment
Share on other sites

Uma sugestão: utiliza o modo de edição simples quando queres colocar código (botão no canto superior esquerdo), e utiliza o bbcode apropriado, directamente no input, para não perderes a formatação.

Edited by KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

É exactamente igual mas sem o &, mas fica aí novamente essa parte do código:

sleep(fluenciaOrdens);
int numero = rand() % 3 + 1;
printf("Apareceu a ordem %d na entrada %d\n",Ordem->ID_Corretor,numero); // Este é só para testar até onde dá o valor correcto
snprintf(fifo, sizeof(fifo), "entrada%d",numero); // A partir daqui passa a dar a referencia
printf("Apareceu a ordem %d na entrada %d\n",Ordem->ID_Corretor,numero);
wrf= open(fifo, O_RDWR);
sprintf(string,"%d",Ordem->Quantidade);
strcat(buffer,string);
write(wrf,buffer, strlen(buffer));
Edited by _Rest_
Link to comment
Share on other sites

Mas... tens lá o & na mesma...

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Ja nao trabalho com C 'a algum tempo, mas nao te falta alocares memoria para a Ordem?

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Memoria para a struct? Mas de qualquer forma o primeiro printf está ok, só depois da linha

snprintf(fifo, sizeof(fifo), "entrada%d",numero);

é que ele passa a dar mal o valor e essa linha nem está a tocar na struct por isso é que não estou mesmo a perceber

Link to comment
Share on other sites

Memoria para a struct? Mas de qualquer forma o primeiro printf está ok, só depois da linha

snprintf(fifo, sizeof(fifo), "entrada%d",numero);

A tua Ordem e' um apontador para a estrutura ordem, queres ler e associar valores onde nao existe memoria, e' uma boa pratica em C declarar todas as variaveis no inicio da funcao e nao existirem variaveis com nomes iguais para nao induzirem em erro.

A mim mostra os dados direitos

#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <string.h>

void escreverOrdem()
{
 int fluenciaOrdens,wrf,numero;
 srand(time(NULL));
 char fifo[10];
 char buffer[10];
 char string [10];

 struct ordem
 {
int ID_Corretor, ID_Titulo, Quantidade;
float Preco;
 }*Ordem;

Ordem = malloc(sizeof(struct ordem));
do{
buffer[0]=0;

fluenciaOrdens=rand() % 5 + 1; // fluencia de entrada de ordens compra/venda

Ordem->ID_Corretor=rand()%49 + 1; //gerar ID's
Ordem->Quantidade=rand() % 99 + 1; //Quantidade aleatoria de ordens
Ordem->Preco=rand() % 25 - 10;

Sleep(fluenciaOrdens);
numero = rand() % 3 + 1;
printf("Apareceu a ordem %d na entrada %d\n",Ordem->ID_Corretor,numero); // Este é só para testar até onde dá o valor correcto
snprintf(fifo, sizeof(fifo), "entrada%d",numero); // A partir daqui passa a dar a referencia
printf("Apareceu a ordem %d na entrada %d\n",Ordem->ID_Corretor,numero);
//wrf= open(fifo, O_RDWR);
sprintf(string,"%d",Ordem->Quantidade);
strcat(buffer,string);
write(wrf,buffer, strlen(buffer));
scanf("%s",buffer);
 }while(1);
}

int main()
{
escreverOrdem();
}

EDIT: ja agora eu nao sou muito adepto em declarar estruturas e mais umas quantas coisas numa funcao, e tambem preferia criar uma varivel para tratar da estrutura.

Edited by pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Em Java também precisas de criar os objectos, não é por aí 😉

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.