tablice - gdzie błąd ?

Odpowiedz Nowy wątek
2011-09-16 19:43
TumusXD
0

Witam. Próbuje zrobić prostą gre platformową typy mario ;p. Właśnie tworze wczytywanie mapy z pliku... każda cyfra to bedzie inny rodzaj "kafelka" w dwóch pierwszych wierszach pliku jest "rozdzielczość" mapki. Nie wszystko działa jak trzeba... kombinuje już drugą godzine i nic. wyswietlanie liczb w konsoli jest sprawdzeniem zmiennych po prostu.

oto kod

 #include <fstream>
#include <string>
#include <sstream>
#include <iostream>

int main()
{
    std::fstream plik;
    plik.open( "mapa.txt", std::ios::in );

    std::string dane,sMapa_x,sMapa_y;
    int mapa_x=0,mapa_y=0;
    getline( plik, sMapa_x );
    getline( plik, sMapa_y );

    //konwersja string na int. dokladniej szerokosc i wysokosc naszej mapki(w kafelkach)
    std::istringstream iss(sMapa_x);
    iss >> mapa_x;
    std::istringstream iss2(sMapa_y);
    iss2 >> mapa_y;

    char bufor2[mapa_y][mapa_x];

int a;
    for(int i=0;i<=mapa_y;i++)
    {
        plik.read(bufor2[i],(mapa_x+1));
    }
    for(int i=0;i<=mapa_y;i++)
    {
        printf( bufor2[i] );
        std::cin>>a;
    }

    plik.close();
}

plik(przykładowy) mapa.txt

 43 
3
0122100000122103333333333333333000000000011
0122100000122103333333333333333000000000012
0122100000122103333333333333333000000000000

oto co kompiluje
user image

zamiast jednej linijki kodu wyswietla dwie ;/

Pozostało 580 znaków

2011-09-16 19:53
0

Próbowałeś debugować? Co wczytuje do sMapa_x i sMapa_y?

Pozostało 580 znaków

2011-09-16 20:02
TumusXD
0

Wcztuje "rozdzielczość" mapki.. poprawnie. Poprawnie także konwertuje je na integer. sprawdzałem

Pozostało 580 znaków

2011-09-16 20:41
Kumashiro
0

Źle używasz printf().

  1. Pierwszym argumentem tej funkcji powinien być format, zatem printf("%s", bufor2[i]).
  2. Funkcja printf() printuje cstringi. Cstring jest tablicą znaków, w której terminatorem jest bajt zerowy. W twojej tablicy nie ma bajtu zerowego, więc printf() wyjeżdża: a) najpierw poza granicę tablicy bufor2[i] (printuje Ci wszystkie trzy tablice), a potem b) wyjeżdża poza obszar tablicy tablic bufor2.
JEŚLI mamy pewność, że w wyświetlanym stringu nie ma znaku %, to można zrobić printf(bufor2[i]) - Azarien 2011-09-17 10:44

Pozostało 580 znaków

2011-09-16 20:50
Kumashiro
0

Poprawiłem Ci pętle, bo miałeś zwalony też warunek:

    for(int i=0;i<mapa_y;i++)
    {
        plik.read(bufor2[i],(mapa_x+1));
    }
    for(int i=0;i<mapa_y;i++)
    {
        fwrite(bufor2[i], 1, mapa_x, stdout);
        printf("|");
    }

Pamiętaj, jeśli X przechowuje liczbę elementów, a iterator startujesz od zera, nie używaj warunku "mniejszy-równy", gdyż zapędzisz pętlę o jeden obrót za daleko.

Pozostało 580 znaków

2011-09-17 14:05
TumusXD
0

Dzięki.. teraz jest wszystko jasne ;) Można zamknąc ;p

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0