我要求用户输入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中,它将通过循环和退出找到它。有没有解决的办法? 或者,我可以使用户不能连续输入相同的值,但可以多次输入相同的值?
答案 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;
我希望这可以帮到你。