c ++: поиск в массиве - PullRequest
       0

c ++: поиск в массиве

0 голосов
/ 18 марта 2020

Я пишу программу, которая должна искать в массиве, заполненном пользовательским вводом, и возвращать разные выходные данные в зависимости от того, есть ли в этом массиве другое целое число, заданное пользователем. выходные данные - индекс элемента.

например, предположим, что мой массив равен {1, 2, 3}. используя search(), если я введу 2, он должен сказать мне, что 2 находится в массиве и что его индексное значение равно 1.

Но по какой-то причине эта функция работает правильно, только если я введите самый первый элемент. Это означает, что если я найду 1 в приведенном выше массиве, он скажет мне, что значение индекса равно 0, как и должно быть, но для других элементов этого не произойдет.

My код ниже. Что я здесь не так делаю?

#include <iostream>

using namespace std;

const int DECLARED_SIZE = 20;

void fillArray(int a[], int size, int& numberUsed);
int search(const int a[], int numberUsed, int target);
int search2(const int a[], int numberUsed, int target);

int main() {
  int size;

  cout << "Enter the array size: ";
  cin >> size;

  int arr[size], listSize, target;

  fillArray(arr, size, listSize);

  char ans;
  int result;

  do {
    cout << "Enter a number to search for: ";
    cin >> target;
    cout << endl << endl;

    result = search(arr, size, target);

    if (result == -1) {

      cout << target << " is not on the list." << endl << endl;
      cout << "Search again? (y/n): ";
      cin >> ans;
      cout << endl << endl;
    }
    else {
      cout << target << " is stored in array position " << result << "." << endl << endl;
      cout << "Search again? (y/n): ";
      cin >> ans;
      cout << endl << endl;
    }

  } while ((ans != 'n') && (ans != 'N'));

  cout << "End of program." << endl;
  return 0;


}

void fillArray(int a[], int size, int& numberUsed) {

  cout << "Enter up to " << size << " non-negative whole numbers." << endl;
  cout << "Mark the end of the list with a negative number." << endl;

  int next, index = 0;

  cin >> next;

  while ((next >= 0) && (index < size)) {

    a[index] = next;
    index++;
    cin >> next;
  }

  numberUsed = index;
}


//searches an array that is filled by the user

//this is where i think i am struggling

int search(const int a[], int numberUsed, int target) {

  int index = 0;
  bool found = false;

  while ((!found) && (index < numberUsed)) {

    if (target == a[index]) {
      found = true;
    }
    else {
      index++;
    }

    if (found) {
      return index;
    }
    else {
      return -1;
    }
  }

  return 0;
}

Ответы [ 2 ]

3 голосов
/ 18 марта 2020

Если вы посмотрите на вашу функцию search, вы увидите, что она всегда возвращается внизу, пока l oop. Вот почему вы найдете только первый номер. Что вы должны сделать, это вернуться, если вы найдете номер, но продолжить, если вы не найдете. Вот так (с некоторыми другими упрощениями вашего кода)

int search(const int a[], int numberUsed, int target) {
  for (int index = 0; index < numberUsed; index++) {
    if (target == a[index]) {
      return index;
    }
  }
  return -1;
}
1 голос
/ 18 марта 2020

В то время как l oop в функции поиска, вы выполняете:

if (found) {
    return index;
} else {
    return -1;
}

Это означает, что если вы не нашли свой ввод, он немедленно возвращает -1 вместо попытки следующего индекс. Вы должны вернуться только после посещения всех других индексов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...