Как искать в массиве значение int, которое уже было введено ранее - PullRequest
0 голосов
/ 24 мая 2018

Я делаю простую угадайку.Пользователь вводит значение из 100, и программа сообщает ему, является ли его предположение слишком высоким или низким.Я хочу сделать так, чтобы программа позволяла пользователям знать, что они уже ввели этот текущий номер ранее.Как бы я внедрил в свою программу цикл, который позволил бы пользователям угадывать и сравнивать его со списком массивов для поиска дублирующихся значений?

#include <ctime>
#include <iostream>
#include <iomanip>
using namespace std;
#include <cstdlib>

int main() 
{
  srand(time(0));
  const int SIZE = 100; //array
  int number[SIZE];
  int i;
  int numb = rand() % 100; //rng
  cout <<"Hint: "<< numb << endl;
  cout << " " << endl;
  cout << "I'm thinking of a number between 1 and 100. Guess what it is: ";
  for (i = 0; i < SIZE; i++)
  {
    cin >> number[i];
      if (number[i] == numb)  
      {
        cout << "Correct! It's " << numb << endl; //if user guesses correct
        break;
      }
      else if (number[i] < numb) //if user guesses too low
      {
        cout << "That's too low! guess again: " ;
      }
      else if (number[i] > numb) //if user guesses too high
      {
        cout <<  "That's too high! guess again: " ;
      }           
  }
}

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Использование std::find

for (i = 0; i < SIZE; i++)
{
  cin >> number[i];
  if  (number[i] == numb)
  {
    cout << "Correct! It's " << numb << endl; //if user guesses correct
    break;
  }
  else if (std::find(number, number + i, number[i]) != number + i) 
  {
    cout <<  "You already guessed that! guess again: " ;
  }
  else if  ... // existing higher or lower
}

Диапазон указателей [number, number + i) - все предыдущие предположения.find возвращает первый совпадающий указатель или конец (number + i), если совпадения нет.

0 голосов
/ 24 мая 2018

Создание вектора для уже введенных значений:

vector <int> atyped;

Создание функции для проверки и возврата значений true или false:

int check(int entered_value, vector <int> atyped) {
ret=0;
  for (int i=0;i<atyped.size();i++){
    if (enterd_value==atyped[i])
     ret=1;
  }
return ret;
}

Тогда все, что вам нужно сделать, это:

if (check(number[i])!=0)
cout << "Sorry, you already tried that one!" <<endl;

Надеюсь, это хотя бы даст вам представление о том, как решить вашу проблему;)

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