С++ не могу найти ошибку

#include<iostream>
#include <ctime>

using namespace std;

void main()
{
    setlocale(LC_ALL, "ru");
    const int SIZE = 10;
    int arr[SIZE];
    srand(time(NULL));

    for (int i = 0; i < SIZE; i++)
    {
        arr[i] = 0 + rand() % (20 - 0 + 1);

        for (int j = 0; j < 21; j++)
        {
            repeat:
            if ((arr[i] == arr[j])&&(i != j))
            {
                arr[i] = 0 + rand() % (20 - 0 + 1);
                goto repeat;
            }
        }
        cout << arr[i] << endl;
    }
}

Суть кода заключается в том что массив arr нужно заполнить случайными числами от 0 до 20 при этом чтобы они(эти числа) не повторялись.


Ответы (2 шт):

Автор решения: Harry

Этот вопрос много раз разбирался здесь, на ruSO.

Но если вы хотите вот так, в лоб, с проверкой — то

int main()
{
    const int SIZE = 10;
    int arr[SIZE];
    srand(time(NULL));

    for (int i = 0; i < SIZE; i++)
    {
        for(bool ok = true; ok; )
        {
            arr[i] = rand() % 21;
            ok = false;
            for(int j = 0; j < i; ++j)
                if (arr[i] == arr[j])
                {
                    ok = true;
                    break;
                }
        }
        cout << arr[i] << endl;
    }
}
→ Ссылка
Автор решения: Qwertiy

Выход за границы массива:

for (int j = 0; j < 21; j++)
                ^^^^^^

    if ((arr[i] == arr[j])&&(i != j))
                   ^^^^^^

Лоджно быть j < i

→ Ссылка