Dziwne znaki podczas wyświetlania tablicy ASCII

0

Tworząc mini grę w konsoli napotkałem dziwny problem który wyświetlał dodatkowe znaki pod mapą.

screen.png

Nie wiem czy jest to spowodowane moim kodem, czy to błąd kompilatora(Code::Blocks).

#include <iostream>
#include <cstdlib>
#include <conio.h>

using namespace std;

int p_x = 2;
int p_y = 2;
int eexit = 0;

char chaar;

int maap[11][20] = {
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176},
                    {176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176}
};

void _display(int playerchar,int playerx,int playery) {
    maap[playerx][playery] = playerchar;

    for(int x = 0; x <= 11; x++) {
        for(int y = 0; y <= 19; y++) {
            cout<<(char)maap[x][y];
        }
        cout<<endl;
    }
}

void _mov(char char_) {
    switch(char_) {
    case 'w':
        break;
    case 's':
        break;
    case 'a':
        break;
    case 'd':
        break;
    case 'z':
        eexit = 1;
        break;
    }
}

int main() {

    while(eexit == 0) {
        _display(1, p_x, p_y);

        chaar = getch();
        _mov(chaar);

        system("cls");
    }
    return 0;
}
0

Pierwsza pętla ma w warunku <=11 podczas gdy rozmiar tablicy jest 11 wiec wychodzisz poza tablicę bo największy indeks to 10. Rada: używaj zawsze < i >, nigdy wersji nieostrej, razem z rozmiarem tablicy w warunku i będzie ok.

0

A może mi ktoś wytłumaczyć dla czego się tak dzieje??

0

Ale dlaczego co sie dzieje? Bo nie bardzo widzę czego nie rozumiesz. Masz tablicę 11 elementową. Czyli indeksy w tej tablicy są od 0 do 10 (liczb od 0 do 10 jest 11, nie wierzysz? sprawdź!). A ty wypisując tablicę odnosisz sie do indeksu numer 11, czyli do pamięci poza tablicą. C i C++ nie robią żadnych testów na to czy nie wyskoczyłeś poza tablicę (m.in. ze względów wydajnościowych). Jak wyjdziesz za daleko to program sie w końcu wysypie, ale jak widać u ciebie jeszcze aż tak daleko nie zaszedłeś. Więc wypisujesz sobie dane które znajdują się "za" twoją tablicą.

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