Błąd krytyczny w prostym kodzie losującym kilka liczb.

1

Witam.

Od niedawna uczę się programowania w C++ i próbowałem stworzyć prosty kod losujący kilka liczb bez powtarzania.
Program się skompilował bez żadnych błędów, czy ostrzeżeń, lecz podczas działania system wyświetla okno o zatrzymaniu programu z powodu błędu lub program działa do końca lecz wylosowane liczby są nie takie, jak określiłem w kodzie. (zdjęcie poniżej) Próbowałem chociaż zlokalizować błąd i okazało się, że prawdopodobnie coś jest z pętlą pod komentarzem.

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

using namespace std;

main(){
	srand(time(NULL));
    int los[10];
    int random;
    int czy = 0;
    int ile = 1;
    bool test;
    do{
    	random = rand()%10;
    	do{
    		if(random == los[czy])
    		test = 1;
    		else{
    			test = 0;
    			ile++;
    		}
    		czy++;
    	}while(czy >= ile);
    	
//wg. mnie coś jest nie tak z pętlą poniżej.

    }while(ile <= 9);
    do{
    	cout<<los[ile]<<endl;
    	ile--;
    }while(ile >= 0);
return 0;
}

18761941475207b25c1aa3d.png
Bardzo proszę o pomoc.

0

o_O

  1. Co wg ciebie powinno się stać tutaj:
if(random == los[czy])

skoro na początku tablica los[] zawiera śmieci?
W ogóle ty przecież NIC do tej tablicy nie wstawiasz i się dziwisz ze to nie działa? o_O Srsly?
2. Używaj pętli for tam gdzie się da, bo jest bardziej czytelna.
3. Przez te twoje while z dziwnymi warunkami po wyjściu z pierwszej pętli masz ile=10 więc przy okazji wychodzisz poza tablicę los[] i stąd program moze czasem rzucać segfault.

0

Use the debugger, luke!
Alzo, nawet nigdzie tej tablicy nie inicjujesz :|
Alzo 2: afair taka deklaracja main() nie jest poprawna w C++ (brak jawnego typu).

0

Nie rozumiem tego kodu :|.

Jaki błąd dostajesz?
Co robi tablicza 'cz'? Po co ona? :|
Dlaczego używasz DevC++?
Wszystkie normalnie IDE wyparowały?

1

Jesli chcesz osiagnac losowanie liczb bez powtorzen z dowolnego przedzialu, to ten kod jest kompletnie bez sensu.

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
 
int main()
{
    vector<int> array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    random_shuffle(array.begin(), array.end());
    copy(array.begin(), array.end(), ostream_iterator<int>(cout, "\n"));
    return 0;
}

http://ideone.com/KT2bKV

0

Dzięki za pomoc.

Use the debugger, luke!
Alzo, nawet nigdzie tej tablicy nie inicjujesz
Alzo 2: afair taka deklaracja main() nie jest poprawna w C++ (brak jawnego typu).

Wiem, Ze kod nie jest nawet w 1% taki jaki być powinien. właśnie dlatego wciąż się uczę. :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1