_Rest_ Posted July 29, 2012 at 08:33 PM Report Share #470873 Posted July 29, 2012 at 08:33 PM 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 More sharing options...
HappyHippyHippo Posted July 29, 2012 at 08:38 PM Report Share #470874 Posted July 29, 2012 at 08:38 PM printf("Apareceu a ordem %d na entrada %d\n",&Ordem->ID_Corretor,numero); isto não será : printf("Apareceu a ordem %d na entrada %d\n",Ordem->ID_Corretor,numero); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
_Rest_ Posted July 29, 2012 at 08:47 PM Author Report Share #470875 Posted July 29, 2012 at 08:47 PM Sim foi erro meu, no código não tem o &, estão os dois só Ordem->ID_Corretor e no primeiro está OK no segundo não. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 29, 2012 at 08:50 PM Report Share #470876 Posted July 29, 2012 at 08:50 PM se o código que tens é diferente do que tens aqui é favor color o que tens ... senão andamos aqui a mandar bitaites para nada IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
KTachyon Posted July 29, 2012 at 08:55 PM Report Share #470877 Posted July 29, 2012 at 08:55 PM (edited) 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 July 29, 2012 at 08:55 PM 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 More sharing options...
_Rest_ Posted July 29, 2012 at 08:55 PM Author Report Share #470878 Posted July 29, 2012 at 08:55 PM (edited) É 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 July 29, 2012 at 08:56 PM by _Rest_ Link to comment Share on other sites More sharing options...
KTachyon Posted July 29, 2012 at 08:56 PM Report Share #470879 Posted July 29, 2012 at 08:56 PM 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 More sharing options...
_Rest_ Posted July 29, 2012 at 08:58 PM Author Report Share #470880 Posted July 29, 2012 at 08:58 PM Estava a editar. Link to comment Share on other sites More sharing options...
pikax Posted July 29, 2012 at 09:20 PM Report Share #470883 Posted July 29, 2012 at 09:20 PM 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 More sharing options...
_Rest_ Posted July 29, 2012 at 09:24 PM Author Report Share #470884 Posted July 29, 2012 at 09:24 PM 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 More sharing options...
pikax Posted July 29, 2012 at 09:42 PM Report Share #470886 Posted July 29, 2012 at 09:42 PM (edited) 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 July 29, 2012 at 09:44 PM 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 More sharing options...
_Rest_ Posted July 29, 2012 at 09:57 PM Author Report Share #470888 Posted July 29, 2012 at 09:57 PM Obrigado!! Era mesmo isso, estou habituado a java e agora em C ainda atrofio um bocado com os apontadores Link to comment Share on other sites More sharing options...
KTachyon Posted July 29, 2012 at 10:40 PM Report Share #470889 Posted July 29, 2012 at 10:40 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now