Как я могу проверить, вводит ли пользователь один и тот же номер дважды? Справка по C ?

#c

#c

Вопрос:

Мне просто нужна быстрая справка. Вот разбивка некоторого кода:

 char userLetter;
int userNumber;

cout << "Please enter a letter: ";
cin >> userLetter;

while(userLetter == 'A')
{
     cout << "Please enter a number: ";
     cin >> userNumber;

     //do something in the loop here

     cout << "Please enter a letter: ";
     cin >> userLetter;
}
  

Теперь мне в основном нужно добавить что-то, что сообщит пользователю, что его ввод недействителен, если он вводит один и тот же номер более одного раза. Например, допустим, пользователь вводит букву A и цифру 2. Цикл while выполняет все, что ему нужно сделать, а затем снова запрашивает у пользователя букву. Допустим, пользователь снова вводит ‘A’. Затем цикл запрашивает у пользователя другой номер, если число снова равно 2, программа должна сообщить пользователю, что это недопустимая запись.

Есть помощь?

Комментарии:

1. Вам нужно сохранить все числа и каждый раз искать по ним число, введенное пользователем.

Ответ №1:

Вы можете использовать std::set , чтобы запомнить все введенные числа и посмотреть, есть ли уже в наборе каждое последующее число.

 std::set<int> numbers;
while(userLetter == 'A')
{
     cout << "Please enter a number: ";
     cin >> userNumber;

     if ( numbers.find(userNumber) != numbers.begin() )
     {
          //prompt error here
          continue;
     }
     else
     {
          numbers.insert(userNumber);
     }

     //do something in the loop here

     cout << "Please enter a letter: ";
     cin >> userLetter;
}
  

Ответ №2:

Сохраните предыдущий номер (ы) в std::vector и проверьте на равенство после считывания последующего номера (ов) с ранее прочитанными и сохраненными номерами.

Ответ №3:

Вы могли бы использовать std::set of std::pair -s или some std::map , чтобы сохранить связь между буквой и числом.

Ответ №4:

Для хранения чисел следует использовать контейнер (std:: set, вероятно). Вы можете вставить с помощью метода «insert» и проверить, есть ли число в наборе с помощью метода «find».

http://www.cplusplus.com/reference/stl/set/

Ответ №5:

 std::map<char, int> m;
std::map<char,int>::iterator it;

it=m.find(userLetter);
if(it!=m.end() amp;amp; *it==userNumber)
{ 
    std::cout << "it's an invalid entry" << std::endl;
    continue;
}
  

Комментарии:

1. Я считаю, что между буквой и цифрой нет соответствия. Он просто хочет отфильтровать числа, введенные дважды.