• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ - przy przejściu z jednego rzędu do drugiego w 2-wymiarowych tablicach zmienna ]przypisuje się dwukrotnie

Object Storage Arubacloud
0 głosów
713 wizyt
pytanie zadane 11 kwietnia 2018 w C i C++ przez filips750 Nowicjusz (150 p.)

A więc, jak w temacie. Przy przypisywaniu zmiennej do tablicy dwuwymiarowej zmienna przypisuje się w dwa miejsca pamięci. Warto zauważyć, że zdarza się to tylko w przypadkach 3,4 oraz 6,7

#include <iostream>

using namespace std;

char tab1 [2] [2];

int main()
{
        char ruch1, znak;
        znak = 'x';
        cin >> ruch1;
        switch (ruch1)
    {
        case '1':
        {
        tab1 [0][0] = znak;
        break;
        }
        case '2':
        {
        tab1 [0][1] = znak;
        break;
        }
        case '3':
        {
        tab1 [0][2] = znak;
        break;
        }
        case '4':
        {
        tab1 [1][0] = znak;
        break;
        }
        case '5':
        {
        tab1 [1][1] = znak;
        break;
        }
        case '6':
        {tab1 [1][2] = znak;
        break;}
        case '7':
        {
        tab1 [2][0] = znak;
        break;
        }
        case '8':
        {
        tab1 [2][1] = znak;
        break;
        }
        case '9':
        {
        tab1 [2][2] = znak;
        break;
        }
    }
        cout<<tab1[0][0]<<endl;
        cout<<tab1[0][1]<<endl;
        cout<<tab1[0][2]<<endl;
        cout<<tab1[1][0]<<endl;
        cout<<tab1[1][1]<<endl;
        cout<<tab1[1][2]<<endl;
        cout<<tab1[2][0]<<endl;
        cout<<tab1[2][1]<<endl;
        cout<<tab1[2][2]<<endl;
    return 0;
}

 

komentarz 11 kwietnia 2018 przez niezalogowany

Bez switch też można:

#include <iostream>

int main()
{
	using namespace std;
	const int xsize = 3, ysize = 3;
	char tab1[xsize][ysize];
	for (int x = 0; x < xsize; ++x) {
		for (int y = 0; y < ysize; ++y) {
			tab1[x][y] = '#';
		}
	}

	char znak = 'x';

	int ruch1;
	cin >> ruch1;
	int xr = (ruch1 - 1) / 3;
	int yr = (ruch1 - 1) % 3;
	cout << xr << " " << yr << "\n";
	tab1[xr][yr] = znak;

	for (int x = 0; x < xsize; ++x) {
		for (int y = 0; y < ysize; ++y) {
			cout << tab1[x][y];
		}
		cout << "\n";
	}

	cout << "\n";

	for (int x = 0; x < xsize; ++x) {
		for (int y = 0; y < ysize; ++y) {
			cout << tab1[x][y] << "\n";
		}
	}
}

3 odpowiedzi

+3 głosów
odpowiedź 11 kwietnia 2018 przez Buby Pasjonat (19,590 p.)
wybrane 12 kwietnia 2018 przez filips750
 
Najlepsza

[0][2] to niepoprawny index - tablice w C++ indeksujemy od 0. (zatem masz dwa ineksy na każdy z wymiarów - 0 oraz 1 - oraz tablica 2x2 ma cztery elementy - w twoim przyadku 9 ;)).

Podwójne zapisywanie jest związane z tym, że w C++ tablica wielowymiarowa na stosie/w obrębie pamięci statycznej to jeden ciągły blok pamięci - więcej możesz doczytać tutaj.

komentarz 12 kwietnia 2018 przez filips750 Nowicjusz (150 p.)
Dzięki wielkie :)
+2 głosów
odpowiedź 11 kwietnia 2018 przez Snejki Stary wyjadacz (14,520 p.)
Przekraczasz rozmiar tablicy. Deklarujesz tablicę o rozmiarze 2x2, co daje 4  pola, a ty masz ich 9.
–1 głos
odpowiedź 11 kwietnia 2018 przez Beginer Pasjonat (22,110 p.)
Może wystarczy tylko na początku tablicę wyzerować. Spróbuj.
komentarz 11 kwietnia 2018 przez monika90 Pasjonat (22,940 p.)
Jego tablica jest wyzerowana.
komentarz 11 kwietnia 2018 przez Beginer Pasjonat (22,110 p.)
Masz rację. Spojrzałem tylko na kod widziałem, że jest poprawny, a autor zgłaszał dziwne zachowanie programu. Ja w takich przypadkach nadaje wartości początkowe. Przez brak koncentracji nie zauważyłem rozmiarów tablicy.

Podobne pytania

0 głosów
2 odpowiedzi 243 wizyt
0 głosów
2 odpowiedzi 105 wizyt
pytanie zadane 15 grudnia 2020 w C i C++ przez Adamek185wp Obywatel (1,280 p.)
0 głosów
1 odpowiedź 885 wizyt
pytanie zadane 11 października 2019 w C i C++ przez kazik8980 Użytkownik (810 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...