С++ не могу найти ошибку
#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