2012-08-28 61 views
1

我試圖做一個程序產生的隨機數,直到找到一組預定義的數字(例如,如果我有一組我5個喜愛的數字,多少次,我需要打的讓電腦隨機找到相同的號碼)。我已經寫了一個簡單的程序,但不明白這似乎是稍稍無關我所期望的結果,例如結局不一定包含所有預定義的數字有時它(甚至不停止循環從運行)。我認爲,問題出在邏輯運算符「& &」但我不知道。這裏是代碼:C++的隨機數的邏輯運算符奇怪的結果

const int one = 1; 
const int two = 2; 
const int three = 3; 

using namespace std;

int main() 
{ 

    int first, second, third; 
    int i = 0; 

    time_t seconds; 
    time(&seconds); 

    srand ((unsigned int) seconds); 

    do 

    { 


    first = rand() % 10 + 1; 
    second = rand() % 10 + 1; 
    third = rand() % 10 + 1; 


    i++; 

    cout << first<<","<<second<<","<<third<< endl; 
    cout <<i<<endl; 
    } while (first != one && second != two && third != three); 

    return 0; 
} 

,這裏是出可能的結果:

3,10,4 
1 // itineration variable 
7,10,4 
2 
4,4,6 
3 
3,5,6 
4 
7,1,8 
5 
5,4,2 
6 
2,5,7 
7 
2,4,7 
8 
8,4,9 
9 
7,4,4 
10 
8,6,5 
11 
3,2,7 
12 

我也注意到,如果我使用||操盤& &的循環將執行,直到找到確切的數字尊重其中的變量設置(在這裏:1,2,3)的順序。這是更好的,但是我應該怎麼做循環停止,即使訂單不一樣,只有數字?感謝您的回答和幫助。

+0

請編輯這個問題,包括你有更新試圖發佈爲[新問題](http://stackoverflow.com/questions/12182551/negation-before-brackets)。 –

回答

4

的問題是,在這裏你的病情:

} while (first != one && second != two && third != three); 

你繼續,而其中沒有一個是相同的。但是,至少其中一個是平等的,你停止/離開循環。

爲了解決這個問題,使用邏輯或(||),而不是邏輯和(&&),以測試鏈接:

} while (first != one || second != two || third != three); 

現在它將會只要其中任何一個不匹配繼續。

編輯 - 需要更高級的比較:

我將使用一個簡單的宏,使其更易於閱讀:

#define isoneof(x,a,b,c) ((x) == (a) || (x) == (b) || (x) == (c)) 

注意,還有你可以使用不同的方法。

} while(!isoneof(first, one, two, three) || !isoneof(second, one, two, three) || !isoneof(third, one, two, three)) 
+0

感謝您的快速回答。但是,如果你看一下結果,你會看到,即使條件fullfiled它不停止。是的,我已經嘗試過||運算符,但如何使循環停止,即使命令不在那裏? – user1627930

+0

爲任何訂單添加了另一種變體檢查。 – Mario

+1

宏是邪惡的。 :) – NoSenseEtAl

1

您的邏輯條件的錯誤:它的意思「而所有的數字不相等」。爲了打破這種狀況,這是足以讓一個對成爲相等。

你需要建立一個不同的狀態 - 要麼把它前面

!(first==one && second==two && third==three) 

「不」或使用De Morgan's law轉換:

first!=one || second!=two || third!=three 
+0

是的,你是對的。它會執行,直到一對數字匹配預定義變量 – user1627930

+0

您能解釋一下如何使用!在bracketss!(....)前面簽名,因爲它顯示錯誤。 – user1627930

+0

@ user1627930它不應該是:'!'是一個常規的一元運算符,它可以放在任何表達式前,包括括號中的一個。 – dasblinkenlight