set<int> numbers;
char userLetter;
int userNumber;
cout << "Please enter a letter: ";
cin >> userLetter;
while(userLetter == 'X')
{
cout << "Please enter a number: ";
cin >> userNumber;
if (numbers.find(userNumber) != numbers.begin())
{
cout << "Invalid!";
continue;
}
else
{
numbers.insert(userNumber);
}
if(userNumber == 2)
cout << "Yes :)";
else
cout << "No :(";
cout << "Please enter a letter: ";
cin >> userLetter;
}
这是我运行程序时会发生的事情:
Please enter a letter: X
Please enter a number: 2
Yes :)
Please enter a letter: X
Please enter a number: 2
Yes :)
Please enter a letter: X
Please enter a number: 2
Yes :)
...
当然,“X”和“2”是我进入的东西。当我输入第二个2时,程序输出不应该“无效”吗?
任何帮助?
答案 0 :(得分:5)
更改此
(numbers.find(userNumber) != numbers.begin())
到这个
(numbers.find(userNumber) != numbers.end())
因为find
会在找不到您要查找的内容时将迭代器返回到结尾
答案 1 :(得分:1)
(假设C ++)
numbers.find(userNumber) != numbers.begin()
检查userNumber
是否是集合中的第一个元素,而不是它是否缺席。你想要numbers.find(userNumber) != numbers.end()
。
或者,更好的是,你可能想要
if (!numbers.insert(userNumber).second)
{
cout << "Invalid!";
continue;
}
因为set :: insert返回pair
,其第二个元素是插入是否成功 - 请参阅here