У меня возникли проблемы с пониманием этой проблемы. Он запрашивает, чтобы прочитать в 20 значениях от пользователя, проверьте, что они находятся между 10 и 100. Если данные действительны, сохраните их в массиве, только если это не дубликат. Пройдя через 20 значений, отобразите только уникальные значения. Я не знаю, почему, но в моем коде он сохраняет каждое значение независимо от того, является ли он дубликат или нет. Я ценю любую помощь!
#include <iostream>
using namespace std;
int main()
{
int duplicate[20];
int numberEntered;
int currentIndex = 0;
bool dup = false;
for (int i = 0; i < 20; i++) duplicate[i] = 0; //initializes all indices to 0
cout << "Enter 20 numbers " << endl;
for (int i = 0; i <= 20; i++)
{
cout << "Enter Number " << endl;
cin >> numberEntered;
if((numberEntered > 10) && (numberEntered < 100) )
{
for (int j = 0; j < currentIndex; j++)
{
if(duplicate[i] == numberEntered)
{
cout << "This number was already entered " << endl;
dup = true;
break;
}
}
if(dup==false)
{
duplicate[currentIndex] = numberEntered;
currentIndex++;
}
}
else
{
cout << "Invalid Number, must be between 10 and 100 " << endl;
i -- ;
}
}
for (int i = 0; i < currentIndex; i++)
{
cout << duplicate[i] << endl;
}
return 0;
}
В
if(duplicate[i] == numberEntered)
{
cout << "This number was already entered " << endl;
dup = true;
break;
}
вы проверяете duplicate[i]
, а не индекс j
который является циклом проверки дубликатов, поэтому ваш код никогда не увидит дубликат.
dup
на false. Почему бы вам просто не пройти шаг за шагом код с помощью отладчика. Это укажет вам на эти логические ошибки, естественно.
std::find_if
. Код может быть немного проще.