tablice - gdzie błąd ?

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 ;/

0

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

0

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

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.
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.

0

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

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