2011-11-11 161 views
-1
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; 
} 

這是當我運行該程序會發生什麼:C++代碼不工作...爲什麼?

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時,不應該輸出程序「無效」?

任何幫助?

+0

爲什麼你標記到Java,C#,Python的和matlab? – bharath

+4

請不要用5種不同的編程語言來標記您的問題,其中一種(您實際使用的語言)將執行此操作。 –

+0

http://www.cplusplus.com/reference/stl/set/begin/ – sarnold

回答

5

改變這種

(numbers.find(userNumber) != numbers.begin()) 

這個

(numbers.find(userNumber) != numbers.end()) 

find迭代器將返回到結束的時候它沒有找到你在找什麼

+0

謝謝,它的工作。但是在它輸出「Invalid」之後,它會要求另一個用戶輸入,如果我輸入另一個X,它將進入無限循環。任何想法爲什麼? – user1038665

+0

@ user1038665,因爲您不檢查流提取是否成功。 – avakar

+0

'X'不是一個整數(它是'cin >> userNumber'行,接下來要求輸入) – Chowlett

1

(假設C++)

numbers.find(userNumber) != numbers.begin()檢查是否userNumber是該集合中的第一個元素,而不是它是否不存在。你想要numbers.find(userNumber) != numbers.end()

或者,更好的,你可能想

if (!numbers.insert(userNumber).second) 
{ 
    cout << "Invalid!"; 
    continue; 
} 

因爲集::插入返回一個pair第二個元素是插入是否成功 - 見here

+0

「(假設C++)」 - 這讓我好奇,其他語言會編譯他的代碼? – sharkin

+0

sharkin,無。我最初標記了一堆語言,所以這可能是爲什麼Chowlett說的。 – user1038665