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

Problem z pętlą, niezamierzony efekt

Object Storage Arubacloud
0 głosów
227 wizyt
pytanie zadane 1 kwietnia 2022 w C i C++ przez PatrykO2 Nowicjusz (240 p.)

Witam, od jakiegoś czasu męczę się z następującym problemem:

deklaruję funkcję

float RandomTable(int length)
{
    int * tablica = new int[51];
    srand(time(NULL));
    for(int i = 0;i<50;i++)
    {
        tablica[i]=rand();
        cout << tablica[i] << endl;
    }
    cout << endl << "koniec" <<endl;
    for(int i=0;i<2;i++)
    {
        cout << i << endl;
    }
}

a następnię wywołuję ją w mainie:

int main()
{
    RandomTable(50);
    return 0;
}

pierwsza pętla for działa dobrze, wykonuje 50 operacji i przestaje działać, druga pętla natomiast działa w nieskończoność. Tą samą drugą pętlę wywołałem w mainie i wyliczyła mi dwie liczby - poprawnie.

Założenie było takie, że druga pętla wypisuje mi elementy z tablicy stworzonej wcześniej, ale wypisywała mi całą tablicę i leciała dalej wypisując jakieś randomowe elementy z pamięci, więc postanowiłem wypisywanie tablicy zrobić w 1 pętli, a w drugiej dla eksperymentu dać polecenie "cout << i << endl;", pętla działa w nieskończoność.

Czy robię coś źlę? A może to jakiś błąd w codeblocks?:D

Pozdrawiam

komentarz 1 kwietnia 2022 przez Whiskey_Taster Pasjonat (15,610 p.)
Zapomniałeś zwrócić cokolwiek z funkcji, masz typ float, a nie zwracasz nic. Zamień typ na void, jak nic nie chcesz zwracać.
komentarz 1 kwietnia 2022 przez adrian17 Ekspert (344,860 p.)
Poza zwracaniem floata to też tutaj nic dziwnego nie widzę - popraw na void i daj znać jak wciąż jest źle.

1 odpowiedź

0 głosów
odpowiedź 1 kwietnia 2022 przez PatrykO2 Nowicjusz (240 p.)
edycja 1 kwietnia 2022 przez PatrykO2

Dzięki za pomoc, rzeczywiście winą był float, chciałem rozbudować funkcję w przyszłości żeby zwracała liczbę i nie spodziewałem się że to może mieć wpływ na samo działanie funkcji.

Mam jeszcze jedno pytanko przy okazji, a mianowicie napisałem funkcję:

srand(time(NULL));
    int r;
    do
    {
        r = rand();
    }
    while (r>length-1);
    return r;

chcę ją wywołać w mainie bądź innej funkcji, żeby uzupełniała tablicę kolejnymi losowymi ale nie takimi samymi liczbami, korzystając z pętli:

for (int i=0; i<10; i++)
    {
        liczba=LosujIndeks(100);
        cout << endl << liczba;
    }

niestety program wyrzuca w każdym cyklu pętli te same liczby, po każdym uruchomieniu programu liczby są inne ale między sobą się nie różnią. Jak mogę wywołać funkcję, ażeby za każdym razem od początku losowała liczbę a nie wyrzucała to co wylosowała "w pierwszym podejściu"?

E: już sobie poradziłem, problemem było wywoływanie za każdym razem "srand(time(NULL));" w funkcji, przeniesienie wywołania sranda do maina rozwiązało problem. Pozdrawiam serdecznie.

komentarz 1 kwietnia 2022 przez Whiskey_Taster Pasjonat (15,610 p.)
Tak jest, ziarno losujemy tylko raz.

Btw. float winą, ale tak w zasadzie kompilator już powinien krzyczeć w trakcie kompilacji, że nie masz nic zwracane z funkcji. Korzystałem z VS, ale pewnie i w CodeBlocks da się ustawić, by kompilator sam zgłaszał takie błędy i nie kompilował, dopóki tego się nie naprawi.

Podobne pytania

0 głosów
2 odpowiedzi 796 wizyt
pytanie zadane 8 października 2019 w C i C++ przez rel Początkujący (340 p.)
0 głosów
2 odpowiedzi 283 wizyt
pytanie zadane 9 stycznia 2019 w C i C++ przez elwkitn91 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 563 wizyt
pytanie zadane 24 stycznia 2018 w C i C++ przez niezalogowany

92,570 zapytań

141,422 odpowiedzi

319,644 komentarzy

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

...