[C++] Problem z wypisywaniem

transatlantyk a
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 2 gru 2015, o 18:53
Płeć: Kobieta
Lokalizacja: Polska

[C++] Problem z wypisywaniem

Post autor: transatlantyk a »

Witam,
Pisze gre w statki i potrzebuje do tego napisać tablicę z liczbami losowymi
zapis tablicy wygląda u mnie tak

Kod: Zaznacz cały

void los()
{
	srand(time(NULL));
	int const N = 10;
	int los[N][N];
	for (int i = 1; i < N; i++)
	{
		for (int k = 1; k < N; k++)
			los[k][i] = ((rand() % 2) + 0);
		cout << los;
		
	}

}
nie rozumiem, jednak, dlaczego przy wypisywaniu tablicy, otrzymuje owszem liczby losowe, ale właściwie z całego ASCII a chodziło mi tylko o 0 i 1
Ostatnio zmieniony 12 gru 2015, o 09:18 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
bartek118
Użytkownik
Użytkownik
Posty: 5974
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

[C++] Problem z wypisywaniem

Post autor: bartek118 »

Bo wypisujesz adresy komórek w pamięci, a nie ich zawartość.
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[C++] Problem z wypisywaniem

Post autor: musialmi »

Innymi słowy, cout << los; nie wypisze ci tablicy w taki sposób, w jaki byś chciał. Bo skąd C++ wie jak byś chciał? Musisz ręcznie wypisywać element po elemencie.
transatlantyk a
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 2 gru 2015, o 18:53
Płeć: Kobieta
Lokalizacja: Polska

[C++] Problem z wypisywaniem

Post autor: transatlantyk a »

w takim razie to powinno załatwić sprawę?
tylko teraz wyświetla mi same 0

Kod: Zaznacz cały

srand(time(NULL));

	int const N = 10;
	int los[N][N] = { ((rand() % 2) + 0) };
	for (int k = 0; k <N; k++)
	{
		for (int i = 0; i < N; i++)
		{
			cout << los[k][i] << " ";
			if (i == 9) cout << " 
";
		}
	}
Ostatnio zmieniony 14 gru 2015, o 08:49 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
bartek118
Użytkownik
Użytkownik
Posty: 5974
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

[C++] Problem z wypisywaniem

Post autor: bartek118 »

Bo teraz nie losujesz nic w tablicy, jest cała zerowa.
athame
Użytkownik
Użytkownik
Posty: 576
Rejestracja: 2 lut 2012, o 21:42
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 1 raz
Pomógł: 64 razy

[C++] Problem z wypisywaniem

Post autor: athame »

Losowanie robisz tylko dla pozycji 10:10. Pozostałe komórki są domyślnie inicjowane na 0, więc rezultat jest taki a nie inny.

Poprawne rozwiązanie to np.

Kod: Zaznacz cały

    srand(time(0));
    
    int const N = 10;
    int los[N][N];
    for (int k = 0; k < N; k++)
    {
        for (int i = 0; i < N; i++)
        {
            los[k][i] = rand()%2;
            cout << los[k][i] << " ";
            if (i == 9) cout << " 
";
        }
    }
Awatar użytkownika
jarzabek89
Użytkownik
Użytkownik
Posty: 1337
Rejestracja: 11 lis 2007, o 21:36
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 4 razy
Pomógł: 181 razy

[C++] Problem z wypisywaniem

Post autor: jarzabek89 »

athame pisze:Losowanie robisz tylko dla pozycji 10:10.
No nie bardzo, numery indeksów tej tablicy kończą się na 9.

Kod: Zaznacz cały

 if (i == 9) cout << " 
";
to brzydko wygląda. Wystarczy samo

Kod: Zaznacz cały

 cout << " 
";
po zakończeniu drugiej pętli for.
transatlantyk a
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 2 gru 2015, o 18:53
Płeć: Kobieta
Lokalizacja: Polska

[C++] Problem z wypisywaniem

Post autor: transatlantyk a »

ale wtedy tablica nie wyświetla mi się w ogóle..
Awatar użytkownika
jarzabek89
Użytkownik
Użytkownik
Posty: 1337
Rejestracja: 11 lis 2007, o 21:36
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 4 razy
Pomógł: 181 razy

[C++] Problem z wypisywaniem

Post autor: jarzabek89 »

Pokaż kod dla którego Ci się nic nie wyświetla.
transatlantyk a
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 2 gru 2015, o 18:53
Płeć: Kobieta
Lokalizacja: Polska

[C++] Problem z wypisywaniem

Post autor: transatlantyk a »

Kod: Zaznacz cały

srand(time(0));
    
    int const N = 10;
    int los[N][N];
    for (int k = 0; k < N; k++)
    {
        for (int i = 0; i < N; i++)
        {
            los[k][i] = rand()%2;
            cout << los[k][i] << " ";
            if (i == 9) cout << " 
";
        }
    }
Ostatnio zmieniony 14 gru 2015, o 08:49 przez Afish, łącznie zmieniany 1 raz.
Powód: Brak tagów code.
athame
Użytkownik
Użytkownik
Posty: 576
Rejestracja: 2 lut 2012, o 21:42
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 1 raz
Pomógł: 64 razy

[C++] Problem z wypisywaniem

Post autor: athame »

Bez żartów. Pokaż nagłówki pliku źródłowego.
transatlantyk a
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 2 gru 2015, o 18:53
Płeć: Kobieta
Lokalizacja: Polska

[C++] Problem z wypisywaniem

Post autor: transatlantyk a »

Kod: Zaznacz cały

#include<iostream>
#include<ctime>
#include<string>
#include<cstdlib> 

tę poprzednią mi wyświetlało, tylko właśnie z samymi zerami
Ostatnio zmieniony 14 gru 2015, o 08:49 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
athame
Użytkownik
Użytkownik
Posty: 576
Rejestracja: 2 lut 2012, o 21:42
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 1 raz
Pomógł: 64 razy

[C++] Problem z wypisywaniem

Post autor: athame »

Jaki kompilator/IDE? Ten kod działa bez problemów i zgodnie z oczekiwaniami pod g++.
transatlantyk a
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 2 gru 2015, o 18:53
Płeć: Kobieta
Lokalizacja: Polska

[C++] Problem z wypisywaniem

Post autor: transatlantyk a »

o juezu, jak sprawdzić jaki mam kompilator? i jeszcze dostałam wiadomość, że cin i cout są dwuznaczne...
athame
Użytkownik
Użytkownik
Posty: 576
Rejestracja: 2 lut 2012, o 21:42
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 1 raz
Pomógł: 64 razy

[C++] Problem z wypisywaniem

Post autor: athame »

W jakim środowisku piszesz?

W tej wersji z pierwszego posta zamiast cout << los wpisz cout << los[i][k] i zamknij to w klamrze razem z poprzednią instrukcją.

PS. Jaką wiadomość? Z kompilatora? Jeśli tak to zamiast cout używaj std::cout.
ODPOWIEDZ