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

Jak zadeklarować dla zmiennej wartość ,,nic" ?

Object Storage Arubacloud
0 głosów
423 wizyt
pytanie zadane 5 stycznia 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)

Chodzi mi to:

Mam kod:

int main()
{
  int plansza[3][3];
  plansza[0][0]=1;
  plansza[0][1]=2;
  plansza[0][2]=3;
  plansza[1][0]=4;
  plansza[1][1]=5;
  plansza[1][2]=6;
  plansza[2][0]=7;
  plansza[2][1]=8;
  plansza[2][2]=9;
  cout << "["<<plansza[0][0]<<"]["<<plansza[0][1]<<"]["<<plansza[0][2]<<"]"<<endl;
  cout << "["<<plansza[1][0]<<"]["<<plansza[1][1]<<"]["<<plansza[1][2]<<"]"<<endl;
  cout << "["<<plansza[2][0]<<"]["<<plansza[2][1]<<"]["<<plansza[2][2]<<"]"<<endl;


  return 0;
}

A chciałbym, żeby bez przypisywania wartości dla tablicy plansza[3][3] te wartości były puste i żeby w oknie konsoli również się nic nie pokazywało tylko puste klamerki kwadratowe.

4 odpowiedzi

+2 głosów
odpowiedź 5 stycznia 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)
edycja 22 kwietnia 2016 przez Sebastian Fojcik

W języku C++ dysponujemy mechanizmem tzw. inicjalizacji zbiorczej. Możesz tablicę zainicjalizować zbiorczo. Robisz to tak:

int tab[ 3 ][ 3 ] = 
{
	{ 1, 2, 3 },
	{ 4, 5, 6 },
	{ 7, 8, 9 }
};

Przy czym pragnę zaznaczyć, że to działa tylko przy inicjalizacji. Czyli tylko w momencie tworzenia tablicy. Późniejsze takie przypisanie się nie uda.
Dzięki takiej inicjalizacji zbiorczej uzyskujemy tablicę uzupełnioną odpowiednio: tab[ 0 ][ 0 ] = 1, tab[ 0 ][ 1 ] = 2, tab[ 0 ][ 2 ] = 3, tab[ 1 ][ 0 ] = 4, tab[ 1 ][ 1 ] = 5 i tak dalej...

Jest jeszcze jeden mechanizm, który stosują kompilatory C++. Czasami chcemy (tak jak Ty teraz), aby cała tablica miała na początku 0. I jest to możliwe. Działa to w sposób następujący:

int tab[ 3 ][ 3 ] = { 5 };

Powyższy zapis sprawi, że pierwszy element tablicy będzie miał przypisaną wartość 5. Czyli:
tab[ 0 ][ 0 ] == 5
Natomiast, wszystkie pozostałe elementy tablicy będą zainicjalizowane zerem.

To znaczy, że jeśli chcesz uzyskać cała tablicę wypełnioną zerem, to piszesz tak:

int tab[ 3 ][ 3 ] = { 0 };

To również działa tylko przy tworzeniu tablicy.

Gdybyś zainicjalizował zbiorczo tylko fragment tablicy, to pozostałe jej elementy będą zainicjalizowane zerami.
Po utworzeniu tablicy i niezainicjalizowaniu jej od razu: int tab[ 3 ][ 3 ] taka możliwość przepada. Wtedy pozostaje Ci wpisywać do tablicy wartość po wartości. (najlepiej w pętli. Nie tak jak Ty w swoim kodzie)

Odpowiadając ostatecznie na Twoje pytanie. Jeżeli stworzysz tablicę int'ów i zechcesz ją wypisać, to w konsoli musi się coś pojawić. int to liczba. Nie istnieje coś takiego jak nic. Jeśli chcesz aby tablica uzupełniona zerami nie była wypisywana, to zrób tak:

cout << (char)tab[ 0 ][ 0 ];

I w ten sposób wypisuj każdy element. Aczkolwiek takie rozwiązanie nie ma żadnego sensu. Nie wiem co Ty kombinujesz, ale CO TY KOMBINUJESZ? :-D

komentarz 5 stycznia 2016 przez Munvik Dyskutant (9,350 p.)
Dzięki kolego :)

A jest możliwość, żeby narazie w tych wartościach plansza[3][3] narazie nic nie było ?

W sensie, żeby konsola mi pokazywała na początek coś takiego:

[ ][ ][ ]

[ ][ ][ ]

[ ][ ][ ]

Bo chcę zrobić kółko i krzyżyk :)
komentarz 5 stycznia 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Trzeba było od razu pisać, że chodzi o kółko i krzyżyk :-)

W takim razie proponuję tablicę znaków:

char plansza[ 3 ][ 3 ] = { 0 };

I wtedy zadziała tak jak chcesz.

A jak zechcesz uzupełnić tablicę cyframi, to zrobisz to tak:

	plansza[ 0 ][ 0 ] = '1';
	plansza[ 0 ][ 1 ] = '2';
	plansza[ 0 ][ 2 ] = '3';
	plansza[ 1 ][ 0 ] = '4';

I tak dalej....

Powodzenia ;-)

komentarz 5 stycznia 2016 przez criss Mędrzec (172,590 p.)
To niech pokazuje spacje XD Albo niech na początku pole ma jakąś wartość na którą jest ustawiony if (jeśli pole ma taką wartość, to nie wypisuj itd).
komentarz 5 stycznia 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)
Dziewięć if ... else'ów na zwykłe rysowanie tablicy... Czy ja wiem.... :P

Za to uzupełnienie tablicy spacjami to lepszy pomysł nawet niż z zerami, bo zostanie zachowany odstęp ;-)
komentarz 5 stycznia 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Albo czekaj. Nie trzeba if ... else'ów. Wystarczyłyby wyrażenia warunkowe:

( plansza[ 0 ][ 0 ] == 0 ? NULL : '1' )

Aczkolwiek śmiem twierdzić, że autor postu nie zna jeszcze wyrażeń warunkowych tworzonych za pomocą trzyargumentowego operatora ?:
Warto jednak wspomnieć dla potomnych :-P

komentarz 5 stycznia 2016 przez criss Mędrzec (172,590 p.)
Zapomniałeś o istnieniu pętli czy co sie dzieje? Nie rozumiem.
komentarz 5 stycznia 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)
Jeżeli autor postu nie używa pętli w swoim programie, to staram się zawsze nie opisywać rozwiązań z użyciem mechanizmów, których może on nie znać. Strata na to mojego czasu, gdyby pytający napisał, że nie rozumie napisanego przeze mnie kodu i rozwiązania.

Trzeba też to brać pod uwagę :-P

Dlatego tutaj w komentarzy podałem mechanizm za pomocą którego można to rozwiązać. Nie samo rozwiązanie. Pętle jeszcze pamiętam :-D
komentarz 5 stycznia 2016 przez Munvik Dyskutant (9,350 p.)
Dzięki za odpowiedzi panowie :) Dużo się nauczyłem :D
0 głosów
odpowiedź 5 stycznia 2016 przez Munvik Dyskutant (9,350 p.)
Albo dla zmiennej char plansza[3][3] ale bardziej mnie interesuje dla inta
0 głosów
odpowiedź 5 stycznia 2016 przez 0rb_12 Bywalec (2,440 p.)
może być string? skoro i tak ma być nic, to string jeżeli nić nie włożysz nic nie wyświetli, int oczywiście zera
komentarz 5 stycznia 2016 przez Munvik Dyskutant (9,350 p.)
Właśnie rzecz w tym, że string to ja wiem jak :D

A jak przypisze 0 dla inta to pokaże 0 a ja tego nie chcę.
0 głosów
odpowiedź 5 stycznia 2016 przez 0rb_12 Bywalec (2,440 p.)

zobacz jeszcze raz definicje zmiennej int i pomyśl czy w tym zakresie jest "nic"

Podobne pytania

0 głosów
2 odpowiedzi 157 wizyt
+1 głos
2 odpowiedzi 909 wizyt
pytanie zadane 6 listopada 2015 w Java przez b00ny Mądrala (6,050 p.)
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 13 grudnia 2018 w JavaScript przez gnu_ewm Gaduła (3,340 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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!

...