C ++代码不起作用......为什么?

时间:2011-11-11 11:51:27

标签: c++

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时,程序输出不应该“无效”吗?

任何帮助?

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