Проверьте, не вводил ли пользователь повторный номер - PullRequest
1 голос
/ 13 января 2020

Так что я все еще начинающий в этом и все еще практикую. По сути, мне нужно создать программу, которая будет продолжать запрашивать у пользователя любое число, кроме 5, пока пользователь не введет число 5.

Я сделал это, но я не мог понять, как проверить, если Пользователь ввел повторяющийся номер. Например: 1 2 3 3 - Программа должна завершиться

#include <iostream>
#include <conio.h>
#include <iomanip>

using namespace std;

int main() {

cout << setw(15) << setfill('*') << "*" << endl;
cout << "Number 5" << endl;
cout << setw(15) << setfill('*') << "*" << endl;

int num;


cout << "Enter a number: ";
cin >> num;

if (num == 5) {
    cout << "\nWhy did you enter 5? :) " << endl;
    _getch();
    exit(0);
}
for (int i = 1; i < 10;i++) {

    cin >> num;

    if (num == 5) {
        cout << "\nWhy did you enter 5? :) " << endl;
        _getch();
        exit(0);
    }
}

cout << "Wow, you're more patient then I am, you win." << endl;
_getch();

}

Ответы [ 2 ]

1 голос
/ 13 января 2020

Предыдущий ответ не соответствует требованию в связанной статье, которое сам квестист, похоже, не gr asp:

★★ Измените программу так, чтобы она запрашивала пользователя ввести любое число, отличное от числа, равного числу раз, которое им было предложено ввести число. (т.е. на первой итерации "Пожалуйста, введите любое число, отличное от 0", а на второй итерации "Пожалуйста, введите любое число, отличное от 1" m et c. et c. Программа должна вести себя соответствующим образом, выходя при входе пользователя номер, который их попросили не указывать.)

Этот вариант соответствует:

#include <iostream>
using namespace std;

int main()
{
    for (int i = 0; i < 10; i++)
    {
        cout <<"Please enter any number other than " <<i <<": ";
        int num;
        cin >>num;
        if (num == i)
            return cout <<"Hey! you weren't supposed to enter " <<i <<"!\n", 0;
    }
    cout <<"Wow, you're more patient then I am, you win.\n";
}
1 голос
/ 13 января 2020

Вы можете добавить все введенные числа в вектор, и всякий раз, когда вы получаете новое число, проверяйте, есть ли оно уже в векторе. Включите эти заголовки:

#include <vector>
#include <algorithm> // for std::find

Сделайте такой вектор

std::vector<int> pastEntries;

Выполните проверку следующим образом:

if (std::find(pastEntries.begin(), pastEntries.end(), num) != pastEntries.end()) {
    std::cout << "\nWhy did you enter " << num << "? :) " << endl;
    ...

И когда номер не был найден, добавьте его к вектору вот так (вы можете поставить это после блока if):

pastEntries.push_back(num);

В качестве альтернативы вы можете использовать std::set:

std::set<int> pastEntries;

Вставьте в набор вот так:

pastEntries.insert(num);

И найдите номер в наборе следующим образом:

if (pastEntries.find(num) != pastEntries.end()) {

Или введите номер, узнав, был ли он уже вставлен вот так :

if (!pastEntries.insert(num).second) {
...