2015-12-03 75 views
-2

我要求用户输入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中的程序,它会发现它是没有用的通过循环并退出。有没有解决的办法? 或者我可以这样做,以便用户不能连续输入相同的值,但可以输入多次相同的值?

+1

“种类的作品”。它完全符合您的标题:它肯定会阻止用户输入两次相同的值。但它显然不是你想要的。你做什么*想要? – Amadan

+0

代码将永远不会有用,因为即使没有找到相同的数字arw,代码也会退出,即使它不是'exit(1);',cide也会检测输入的数字jyst是否重复。 – MikeCAT

+0

@Amadan我想要的是不要退出程序的任何给定的输入,这是发生了什么,因为if语句总是运行真正的,因为输入存储在val中,找到,然后循环告诉程序退出。我需要用户能够输入一次任何号码,但是当输入一个号码时会中断。 – Surge

回答

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); 
    } 
+0

我已经尝试了这一点,它不是解决方案,因为输入立即存储在val中,它在循环时找到它,即使只输入一次该值也会退出。这就是我的问题所在,而不是它是否在真实时退出,但是如何在第一次将输入放入向量时停止它。在FYI中,在我的编译器中,代码是缩进的。 – Surge

1

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

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

谢谢,但问题是,if语句始终是真的,因为有输入它存储在val中,找到然后程序退出! – Surge

+0

您是否尝试过检查'input'和'val [i]'的值以防万一?类似于'cout <<“输入:”<< input <<“val [i]:”<< val [i] << endl;' – xboi209

+0

是的,val被正确存储。让我们说用户输入'1'。 '1'进入val,循环检查val中的内容,看到与输入相同的'1',所以它退出。 – Surge

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); 
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; 

我希望这可以帮助你。

相关问题