[C++] Niewyświetlające się liczby przy losowaniu z tablicy jednowymiarowej


(Puczi19021998) #1

Witajcie, jestem kompletnie zielony, więc próbuję uczyć się C++ z kursu, ale mam problem. Pracuję teraz nad maszyną losującą, która w założeniu ma losować dużo liczb. Zgodnie z moim rozumieniem kursu (choć z tym rozumieniem może być coś nie tak), napisałem program, który wygląda tak:

#include <iostream>
#include <cstdlib>
#include <ctime>
int tablica()
{
    srand( time( NULL ) );
    int liczba[999];
    int licznik = -1;
    do
    {
        licznik++;
        liczba[licznik] = ( rand() % 7) + 4;
        return liczba[licznik];
    } while(licznik < 999);
}
int main()
{
    std::cout << "Wylosowane liczby: " << std::endl;
    std::cout << tablica() << std::endl;
    return 0;
}

Wszystko się ładnie kompiluje, ale program losuje mi tylko jedną liczbę. Mógłby mi ktoś powiedzieć co ja robię nie tak?

 

Tak poza tym to mam małe problemy z programami, które już napisałem, ponieważ nie wiedzieć czemu po wykonaniu powierzonego zadania, wyłączają się natychmiastowo nie oczekując na wciśnięcie klawisza, żeby wyłączyć, co sprawia dyskomfort przy korzystaniu, ponieważ przez to nie można zobaczyć wyników pracy i/lub wiadomości końcowej. Więc prosiłbym o pomoc także z tym problemem.

 

Proszę o szybkie odpowiedzi i z góry za nie dziękuję. Może w przyszłości będę miewał mniej problemów.


(Protected_48) #2

Czy to ma być rekurencyjne wypełenienie tablicy? Uważam, że raczej na początku rozchodzi się o wersje iteracyjną, czyli tutaj mógłbyś po prostu stworzyć void i wylosowane liczby wypisywać. Dobrym wyjściej jest stworzenie makra o którym można posłuchać tutaj :

 

http://www.youtube.com/watch?v=REQVOGiXplU

 

Używaj przestrzeni nazw std;

using namespace std;

 Naddajesz sobie tylko pisania.


(Drobok) #3

Losuje bo zwrócenie liczby następuje w pierwszym przejściu (return przerywa dalsze wykonywanie kodu). Gdy już ten return z tamtąd wywalisz dojdziesz pewnie do wniosku że musisz zwrócić całą tablicę, a nie tylko jeden jej element. Lecz tutaj musisz zwrócić wskaźnik którego pewnie jeszcze nie przerobiłeś, a potem wyświetlić w pętli już w main. 

Ew możesz wyświetlać w funkcji w której losujesz / zadeklarować tablicę globalną i pracować na niej (zła praktyka, ale nim poznasz wskaźniki dobre i to).


#4

Wonskacz, proszę zapoznaj się z tą stroną oraz tym tematem, a następnie, używając opcji EDYTUJ , później Użyj pełnego edytora , popraw tytuł tematu, tak aby mówił konkretnie o problemie. W przypadku zignorowania prośby temat poleci do śmietnika.


(Kuba Lange Gd) #5

Co do czekania na wciśnięcie klawisza, użyj funkcji getch(). Umieść ją na końcu funkcji main(). Pamiętaj, aby na początku dodać odpowiednie biblioteki:

#include <cstdio>
#include <conio.h>

Jeśli chodzi o losowanie to kiedyś czytając kurs miałen identyczny problem, ale byłem zbyt leniwy żeby zapytać o to na forum :).

 

Mam nadzieję, że pomogłem.


(Puczi19021998) #6

 

Dzięki za flimik, ale nadal nie łapię o co chodzi z makrem, a rand () i przedział to już chyba dobrze umiem. A do rady z std się zastosuję, o ile znowu mnie nie zaatakuje ,nawyk" pisania std wszędzie gdzie się da.


(Drobok) #7

Nie pomogłeś, Polecona przez ciebie biblioteka jest nieprzenośna.