"for(j=0; j<21; j++)"
21 borde vara 20 om du vill gå igenom alla. Fast du bör inte gå igenom de tal som inte är slumpade. Använd därför i istället för 21.
unik-variabeln är dessutom logiskt fel. Du utgår från att om unik=1, är talet inte unikt. Det borde vara tvärtom.
srand( time(NULL) );
std::vector<unsigned short> v;
unsigned short n = 0;
while (n != 20) {
re:
unsigned short num = rand() % 20 + 100;
for (unsigned short i = 0; i < v.size(); ++i)
if (num == v[i]) goto re;
v.push_back(num);
++n;
}
for (unsigned short i = 0; i < v.size(); ++i)
std::cout << v[i] << std::endl;
Jag hittade två fel i koden utan att testköra den. Nu har jag hittat ett till. Om unik sätts till 1 kommer programmet att fastna i en oändlig loop. Ändra "unik=0; do {" till "do { unik=0;". Försök att hitta resten själv. :)
Det väldigt dumt att slumpa 20 unika tal mellan 1 och 20. Då innebär det att datorn till slut måste gissa sig fram till vilka tal som är lediga och det kan ta väldigt lång tid (oändlig tid om du har otur). Du har två alternativ här. Du kan antingen öka intervallet eller lägga alla giltiga tal i en separat lista där du plockar bort de tal som är ogiltiga/tagna.
--
Efter att jag skrivit mitt inlägg såg jag inlägget av Peter S. Det innehåller goto, som bara ska användas i undantagsfall. Bort med det!
Anledningen till att jag vill slumpa 20 tal inom ett intevall mellan 1 till 20 är för att testa om mit program verkligen slumpar unika tal. Sedan ska jag öka intervallet.