Устранение дублирования с массивами

0

У меня возникли проблемы с пониманием этой проблемы. Он запрашивает, чтобы прочитать в 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;
}
  • 0
    Используйте алгоритмы, такие как std::find_if . Код может быть немного проще.
Теги:
arrays

1 ответ

0

В

    if(duplicate[i] == numberEntered)
    {
        cout << "This number was already entered " << endl;
        dup = true;
        break;
    }

вы проверяете duplicate[i], а не индекс j который является циклом проверки дубликатов, поэтому ваш код никогда не увидит дубликат.

  • 0
    Спасибо! Я исправил это. Но теперь, когда вы вставляете дубликат, он не сохраняет никаких последующих номеров. Например, когда я положил 12, он хранит 12. 13, хранит 13. 14 магазинов 14. Теперь, введите 12 еще раз, он не сохраняет его. Теперь попробуйте ввести 56, не сохраняет его. Это просто останавливается ...
  • 0
    Это потому, что вы не сбрасываете dup на false. Почему бы вам просто не пройти шаг за шагом код с помощью отладчика. Это укажет вам на эти логические ошибки, естественно.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню