Skocz do zawartości

Problem z pętlą


^#$PAUL$#^

Rekomendowane odpowiedzi

Mam taki oto kod:

GML
file_text_open_read("dane.txt");

tekst=file_text_read_string(1);

 

for(i=1; i>30; i=i+1)

{

 

poz=string_copy(tekst,0,string_pos(".",tekst));

poz=string_replace(poz,".","");

zawodnik=string_copy(tekst,6,25);

kraj=string_copy(tekst,31,3);

zawodnicy=i;

wyn=i;

tekst="";

file_text_readln(1);

tekst=file_text_read_string(1);

}

file_text_close(1);

 

for (i=1; i==30; i+=1)

{

poz=real(poz);

}

 

I wszystko jest ok. Problem pojawia się dopiero gdy chcę wyświetlić którąś ze zmiennych albo zapisać ją do pliku np. w taki sposób:

GML
file_text_open_append("wynik.txt");

file_text_write_string(1,zawodnik[1]);

.

Wyskakuje wtedy błąd:

ERROR in
action number 1
of Create Event
for object object1:

Error in code at line 26:
   file_text_write_string(1,zawodnik[1]);
                            ^
at position 27: Unknown variable zawodnik or array index out of bounds

 

Wygląda to tak jakby pętla się nie wykonywała (bo np. dając w klocku draw variable "string_copy(tekst,6,25);" wyświetla się poprawnie), a ja nie wiem z jakiego powodu :( Jest to dziwny błąd a ja po raz setny go widząc mam zamiar wyrzucić komputer przez okno. Proszę o pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

for(i=1; i>30; i=i+1)

Fail! Zamień to na:

GML
for( i = 0; i < 30; i += 1; )

A tablice indeksujemy od zera do n-1!

 

Kolejny fail:

for (i=1; i==30; i+=1)

Zamień to na powyższy kod. A gdybyś był sprytniejszy, wstawiłbyś kod "poz=real(poz);" do pętli powyżej, bo są identyczne...

 

Ten kod na każdym kroku jest chory. Do zapisu używasz:

GML
file_text_open_append("wynik.txt");

To używaj także do odczytu, albo zachowaj konsekwencję, i do jednego używaj _read, a do drugiego _write.

 

Samej pętli for zamiast while i funkcji eof także nie rozumiem. Gdybym tylko pamiętał operacje na plikach w GMie, wymieniłbym wszystkie błędy. Wierz mi, występują one na każdym kroku.

Odnośnik do komentarza
Udostępnij na innych stronach

tak wiem, że indeksujemy od zera, ale w innych aplikacjach działało więc pomyślałem, że nie ma to znaczenia :)

jedynie znak różności był tu źle odwrócony :D zapomniałem że ten warunek w pętli for mósi być spełniony aby się wykonywała :bash: , myślałem, że pętla się kończy jak warunek zostanie spełniony . Taka mała skleroza ;)

dzięki :thumbsup:

 

a co do operacji na plikach i wszytkiego innego to wszystko działa . uwież mi przegryzałem się przez to wszystko :) i gdzie tam funkcja eof ? 0_o

Odnośnik do komentarza
Udostępnij na innych stronach

zapomniałem że ten warunek w pętli for mósi być spełniony aby funkcja się wykonywała , myślałem, że pętla się kończy jak warunek zostanie spełniony .

Większej głupoty / sprzeczności / wymówki w życiu nie słyszałem. Nie miałoby to sensu. A tablice należy indeksować od zera, bo indeks zerowy oznacza pierwszy element.

 

a co do operacji na plikach i wszytkiego innego to wszystko działa . uwież mi przegryzałem się przez to wszystko

Przecież ja ci nie muszę wierzyć, bo jestem świadomy, co ten kod robi. Tylko, że nie rozumiem, dlaczego do samego zapisu używasz file_text_open_append...

Odnośnik do komentarza
Udostępnij na innych stronach

to powiedz mi jakie to ma tu znaczenie? nie ma żadnego ! poprostu element o indeksie 0 w każdej tablicy jest pusty i jak nie będe sie do niego odwoływać to napewno nie wystąpi błąd :) a używam tablic od 1 , bo wczytuje wyniki z DSJ i ciężko żeby ktoś zajął zerowe miejsce. Tak jest dla mnie łatwiej i czytelniej.

 

mnie nie obchodzi to, że używam złej funkcji . Ważne jest tylko to, że wszystko działa.

Odnośnik do komentarza
Udostępnij na innych stronach

to powiedz mi jakie to ma tu znaczenie? nie ma żadnego ! poprostu element o indeksie 0 w każdej tablicy jest pusty i jak nie będe sie do niego odwoływać to napewno nie wystąpi błąd :) a używam tablic od 1 , bo wczytuje wyniki z DSJ i ciężko żeby ktoś zajął zerowe miejsce. Tak jest dla mnie łatwiej i czytelniej.

 

mnie nie obchodzi to, że używam złej funkcji . Ważne jest tylko to, że wszystko działa.

Ważne jest to, że przez to twój kod jest mniej optymalny i wydajny. A w GMie obydwie te cechy są na wagę złota.

a używam tablic od 1 , bo wczytuje wyniki z DSJ i ciężko żeby ktoś zajął zerowe miejsce.

Ale indeks zerowy oznacza pierwszy element... Matko, ile można to tłumaczyć.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Może przyzwyczajenie z PHP, gdzie napisanie $x[5] nie oznacza przypisania innych indeksów tablicy (choć rzeczywista reprezentacja tej tablicy w pamięci to i tak zerowy indeks...)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...