2015-12-03 109 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; 

我希望這可以幫助你。

相關問題