Avatar billede mieritz Nybegynder
17. september 2003 - 10:24 Der er 15 kommentarer og
1 løsning

lægge float i varialbe og lægge dem sammen

Jeg har et meget simpelt spørgsmål og forstår simplethen ikke hvorfor det ikke virker.

her er den kode som ikke virker for mig

x = p->price;
y = y + x;

x og y er defineret længere oppe i programmet som en float idet det er kommatal der regnes med.

P->price er en pris på et produkt som jeg får fra en server. Jeg får det rigtige tal og det lægges over i x, men det jeg så ikke forstår er at y også bliver lig med x. Det skal jo ske første gang jeg kører igennem, men da ikke når jeg kører igennem gangen efter der skulle jeg meget gerne have fat i det nye x og det gamle y. Det vil sige at y skal hele tiden bliver større og større til alle tal er talt sammen. Alt dette forgår i en switch statement.
Avatar billede jpk Nybegynder
17. september 2003 - 10:28 #1
Prøv at vise lidt mere kode.

Du kan iøvrigt slå dine to linier sammen til:

y += p->price;
Avatar billede mieritz Nybegynder
17. september 2003 - 10:34 #2
case Protocol::logGames:{
      char buf[50];
      LogBill* p=(LogBill*)pr;
    drawItem(LogList,LogHeader,Rect,4,pay_rec::price_tostr(p->price).c_str());

      x = p->price;
      y = y + x;
      break;
    }
Avatar billede arne_v Ekspert
17. september 2003 - 10:37 #3
Det lyder lidt som om y bliver initialiseret til 0 for
hvert gennemløb.
Avatar billede mieritz Nybegynder
17. september 2003 - 10:42 #4
ja det er nok det der er problemet men hvordan undgår jeg det
Avatar billede arne_v Ekspert
17. september 2003 - 11:06 #5
Meget svært at sige uden at have set koden hvor y defineres/initialiseres.

Muligvis skal den bare erklæres static.

Muligvis skal den initialisers et andet sted.
Avatar billede mieritz Nybegynder
17. september 2003 - 11:12 #6
void __fastcall TGetBillForm::LogListDrawItem(TWinControl *Control,
      int Index, TRect &Rect, TOwnerDrawState State)
{
  LogList->Canvas->FillRect(Rect);
  Log* pr=(*log)[Index];
  drawItem(LogList,LogHeader,Rect,0,pr->time.to_str().c_str());
  drawItem(LogList,LogHeader,Rect,1,pr->foliono.foliono);
  drawItem(LogList,LogHeader,Rect,2,pr->roomno.roomno);
  drawItem(LogList,LogHeader,Rect,3,pr->text);
 
  ;
  float x,y=0;
  switch(lt) {

case Protocol::logGames:{
      char buf[50];
      LogBill* p=(LogBill*)pr;
    drawItem(LogList,LogHeader,Rect,4,pay_rec::price_tostr(p->price).c_str());

      x = p->price;
      y = y + x;
      break;
    }

det er sådan at det ser ud bortset fra der er en del cases mere
Avatar billede arne_v Ekspert
17. september 2003 - 11:25 #7
float x,y=0;

sets y to zero every time TGetBillForm::LogListDrawItem is called.
Avatar billede arne_v Ekspert
17. september 2003 - 11:26 #8
float x;
static float y = 0;

will behave differently.

But I am far from sure that it is what you really want.
Avatar billede arne_v Ekspert
17. september 2003 - 11:26 #9
Hov - undskyld det engelske.
Avatar billede mieritz Nybegynder
17. september 2003 - 11:28 #10
det jeg vil have er at x skal sættes til en ny værdi hver gang jeg kommer derind. Y skal have x gamle værdi og de skal så lægges sammen hele tiden så y bliver total af alle x til sidst.
Avatar billede olennert Nybegynder
17. september 2003 - 11:36 #11
mieritz>> y bliver initialiseret i en funktion. Det betyder at oversætteren "laver en ny" y hver gang du kalder funktionen. Du har så bedt om at få y initialiseret til 0, og det vil oversætteren så også gøre for dig *hver gang du kalder funktionen*.

Så hvis du vil bevare y's værdi mellem kald af funktionen, så skal du enten gøre som arne foreslår (altså lav den static), eller også skal den defineres udenfor funktionen. I det tilfælde bør du (for at undgå grimme globale variabler) enten lade y være medlem af klassen TGetBill, eller være referenceoverført til funktionen.
Avatar billede mieritz Nybegynder
17. september 2003 - 11:40 #12
hvad vil det sige at man gør en variabel static
Avatar billede arne_v Ekspert
17. september 2003 - 11:49 #13
Når en variabel inde i en funktion/metode bliver erklæret
static så bevarer den værdien mellem kald.
Avatar billede mieritz Nybegynder
17. september 2003 - 11:55 #14
ok det virker også nu du kan lige smide et svar så du kan få dine point
Avatar billede mieritz Nybegynder
17. september 2003 - 11:56 #15
nu skal jeg bare have vist værdien grafisk hvordan er det nemmest at gøre jeg har oprettet en tchart, men hvordan får jeg værdien over i min chart
Avatar billede arne_v Ekspert
17. september 2003 - 12:49 #16
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester