problem ze zmienną lokalną

O jezykach programowania w platformach i nie tylko.
wojnowy
Stały bywalec
Stały bywalec
Posty: 63
Rejestracja: 24 wrz 2010, 10:09

Nieprzeczytany post autor: wojnowy »

LowcaG pisze:A w mqlu jezeli nie zainicujesz zmiennej zmienna ta przyjmuje wartosc 0 (tablice tez)
Hmm, to trochę dziwne bo tak jak wspomniałem - z tablicą wychodzi :-) tzn. może znowu na przykładzie mam coś takiego:

Kod: Zaznacz cały

bool once = true;
void start()
   {
   int zmienna;
   int tablica[10];
   if(once)
      {
      once = false;
      zmienna = 5.0;
      for(i=0;i<10;i++){
         tablica[i] = i;
         }
      }
   Comment("tablica[1] = ", tablica[1], "  zmienna = ", zmienna); // tablica powinna dać 1 a zmienna 0 <- Tutaj tkwi ciekawostka ;)
   }
To oczywiście taki przykład (bardzo uproszczony) ale u mnie działa -> zapamiętuje to co przypiszę tablicy a przy kolejnym ticku nie zmieniają się wartości na 0 -> czy wiesz może czemu tak jest?
LowcaG pisze:a inicjowanie w funkcji init (skoro chcesz tylko raz)
Właśnie nie za bardzo mogę (może w ostatecznej wersji). Obecnie nie jest to możliwe bo robię na bieżąco testy, które wykorzystują poprzednie słupki (ponad 1000) a w testerze na starcie jest tylko 1000 słupków i nie ma możliwości się odnieść do jeszcze wcześniejszych.
Dlatego w programie muszę zrobić coś takiego:

Kod: Zaznacz cały

if(Bars>3000){ // taki przykład
   if(once){
      ... //kod
      }
   }
LowcaG pisze: Z rad jakie mogę dac, to pakowanie wszystkiego co tylko sie da, czyli zmienne i kod w funkcje, a w Start() zostawic tylko szkielet systemu który jest latwy i czytelny.
Staram się stosować do tej zasady bo bałagan towarzyszy mi przez całe życie :P ale różnie z tym bywa.
Pozdrawiam i jeszcze raz dzięki wszystkim za odpowiedzi (za dobre chęci i za udzielenie pomocy :) ).
Ostatnio zmieniony 08 lis 2010, 09:55 przez wojnowy, łącznie zmieniany 1 raz.
(\(^.^)/)

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Albo zmienną once deklarujesz jako globalną (przed kodem), albo
static bool once = true;
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

wojnowy
Stały bywalec
Stały bywalec
Posty: 63
Rejestracja: 24 wrz 2010, 10:09

Nieprzeczytany post autor: wojnowy »

Tig3r pisze:Albo zmienną once deklarujesz jako globalną (przed kodem), albo
Tiger dzięki ale to to akurat wiem i od początku tak robiłem.
Problem dotyczył zmiennych, które deklarowałem/przypisywałem im wartość w ciele if-a. Obecnie wszystko jest ok poza jedną rzeczą, którą napisał LowcaG a mianowicie wydaje mi się, że deklarowanie tablicy lokalnej nie przypisuje od razu 0 albo działają podobnie jak static (co bardziej mi się wydaje prawdopodobne).
W sumie mniejsza z tym.
Dzięki

Dodano po 5 minutach:

by the way, trochę zmieniłem powyższy przykład, żeby lepiej zobrazować w czym tkwi haczyk :P
(\(^.^)/)

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Skoro tablice masz lokalnie to co się dziwisz że pokazuje Ci 0. Raz ją wypełnia i przy kolejnym uruchomieniu jest 0.
Daj deklarację tablicy do globala i powinno być ok - jeśli dobrze zrozumiałem Twój problem.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

wojnowy
Stały bywalec
Stały bywalec
Posty: 63
Rejestracja: 24 wrz 2010, 10:09

Nieprzeczytany post autor: wojnowy »

Tig3r pisze:Skoro tablice masz lokalnie to co się dziwisz że pokazuje Ci 0. Raz ją wypełnia i przy kolejnym uruchomieniu jest 0.
Właśnie chodzi o to, że tablica zwraca cały czas (po każdym ticku) wynik, który jest przypisany w if-ie a zmienna zwraca 0. Czemu? Jak byłoby tak jak napisał LowcaG to tablica również zwracałaby 0 więc wniosek jest taki, że tablica ma cechy podobne do static.
Tak jak pisałem wcześniej chodzi właśnie o to, żeby nie deklarować globalnie - pozostaje static.
(\(^.^)/)

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

wojnowy pisze:Hmm, to trochę dziwne bo tak jak wspomniałem - z tablicą wychodzi tzn. może znowu na przykładzie mam coś takiego:
Tak, bo wszystkie tablice sa static., A inicjowane są oczywiscie zerami ;)

Dlatego jak chcesz miec pewnosc to

Kod: Zaznacz cały

ArrayInitialize(tab,0);

wojnowy
Stały bywalec
Stały bywalec
Posty: 63
Rejestracja: 24 wrz 2010, 10:09

Nieprzeczytany post autor: wojnowy »

LowcaG pisze: Tak, bo wszystkie tablice sa static.
Dzięki właśnie o taką odpowiedź mi chodziło :)
Pozdrawiam
(\(^.^)/)

ODPOWIEDZ