如何阻止用户两次输入相同的值?

时间:2015-12-03 00:56:06

标签: c++ loops vector input menu

我要求用户输入1到10之间的整数,但我想确保它们不会输入两次相同的值。我怎样才能做到这一点?这是我到目前为止所拥有的......

cin >> input;
vector<int>val;
val.push_back(input);
for(int i=0; i<val.size(); i++){
if(input==val[i])
cout << "error";
exit(1);}

所以这在终止程序方面起作用但它没有用,因为它总是停止程序,因为输入将存储在val中,它将通过循环和退出找到它。有没有解决的办法? 或者,我可以使用户不能连续输入相同的值,但可以多次输入相同的值?

4 个答案:

答案 0 :(得分:1)

如果您正确缩进代码,您可能会看到解决方案。

cin >> input;
vector<int>val;
val.push_back(input);
for(int i=0; i<val.size(); i++){
   if(input==val[i])
      cout << "error";
   exit(1);
}

你想要两个

   cout << "error";
   exit(1);

input==val[i]时执行。好吧......把它们都放在if陈述下。

   if(input==val[i])
   {
      cout << "error";
      exit(1);
   }

答案 1 :(得分:1)

检查向量中的第一个元素后,程序将退出,因为对exit()的调用不是你所拥有的if语句的一部分。要解决这个问题,你可以添加大括号,使它像:

if(input==val[i])
{
    cout << "error";
    exit(1);
}

答案 2 :(得分:1)

“有办法解决这个问题吗?”是的,C ++是完整的,它可以做很多事情。

在这种情况下,我想你想要这样的东西:

vector<int>val;
cin >> input;
bool err = false;
for(size_t i=0; i<val.size(); i++){
    if(input==val[i]){
        cout << "error";
        err = true;
        break;
    }
}
if(!err) val.push_back(input);

答案 3 :(得分:0)

我认为你可以这样做:

map<uint32_t, uint32_t> counter_map;
const uint32_t initial_counter = 0;
//create a counter
for(int i=1; i<=10; ++i)
{
    counter_map[i] = initial_counter;
}
int input;
while(cin >> input)
{
    if(input < 1 || input > 10)
    {
        cout << "error" << endl;
        break;
    }

    ++counter_map[input];
    if(counter_map[input] > 1)
    {
        //input twice
        cout << "error" << endl;
        break;
    }
}
return 0;

我希望这可以帮到你。