2012-11-19 93 views
-1

我想在C++中製作一個骰子程序。在那個程序中,我有一個名爲「bool_if」的函數(不要問我爲什麼按照我的方式命名一些東西,我爲我製作了這個程序,而且我不想更改變量/函數名稱)。我希望bool_if()檢查數組中的任何元素是否相同。 很抱歉,如果這沒有意義,這裏的源代碼(我在源代碼中的註釋部分,因爲我想要的):如何檢查數組是否等於任何其他數組C++?

#include <cstdlib> 
#include <ctime> 
#include <iostream> 
#include <unistd.h> 
#include <fstream> 

using namespace std; 

void clear() 
{ 
    cout<<"\033[2J\033[1;1H"; 
} 

bool rolled_die[5]; 

void dice() { 
    if (die[0] == die[1] || die[0] == die[2] || die[0] == die[3] || die[0] == die[4] || die[0] == die[5]) { 
    rolled_die[0] = true 
    } 
    else if (die[1] == die[2] || die[1] == die[3] || die[1] == die[4] || die[1] == die[5]) { 
    rolled_die[1] = true 
    } 
    else if (die[2] == die[3] || die[2] == die[4] || die[2] == die[5]) { 
    rolled_die[2] = true 
    } 
    else if (die[3] == die[4] || die[3] == die[5]) { 
    rolled_die[3] = true 
    } 
    else if (die[4] == die[5]) { 
    rolled_die[4] = true 
    } 
} 

int finished_score = 0 

void bool_if { 
    if (rolled_die[0] == true || rolled_die[1] == true || rolled_die[2] == true || rolled_die[3] == true || rolled_die[4] == true) { 
    finished_score++; 
    } 
    /* In this part, I need to check if rolled_die[0] is equal to rolled_die[1], or rolled_die[2], etc all the way up to rolled_die[5]. */ 


int main() 
{ 
    srand(time(0)); 

    int die[6] = { (rand()%6)+1,(rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1 }; 
    int bet; 

    ifstream a_file ("Score.txt"); 
    if (!a_file.is_open()) { 
    clear(); 
    cout<<"Score file could not be loaded. Maybe file doesn't exist?\n"; 
    return 0; 
    } 

    int score; 
    a_file>> score; 

    clear(); 
    cout<<"How much would you like to bet?\nRemember, you only have $"<< score <<"!\nEnter your bet: "; 
    cin>> bet; 

    if (bet > score) { 
    clear(); 
    cout<<"You bet more money then you have!\n"; 
    return 0; 
    } 

    clear(); 
    cout<<"Rolling...\n"; 
    usleep(0.1 * 1000000); 
    cout<<"First die: " << die[0] <<"\n"; 
    usleep(1.3 * 1000000); 
    cout<<"Second die: " << die[1] <<"\n"; 
    usleep(0.3 * 1000000); 
    cout<<"Third die: " << die[2] <<"\n"; 
    usleep(2 * 1000000); 
    cout<<"Fourth die: " << die[3] <<"\n"; 
    usleep(0.3 *1000000); 
    cout<<"Fifth die: " << die[4] <<"\n"; 
    usleep(1.2 * 1000000); 
    cout<<"Sixth die: " << die[5] <<"\n"; 
    cout<<"\n\nPress enter to see how you fared."; 
    cin.get(); 
    clear(); 

    return 0; 
} 

也請告訴函數骰子()不工作。我想要骰子()檢查任何對。

+1

請參閱http://stackoverflow.com/questions/6248044/c-comparing-two-vectors – Joe

+0

任何原因你不只是使用兩個for循環? –

+6

'我不想改變變量/函數名稱'然後你對_my_時間太不靈活! –

回答

1
int die[6] = { (rand()%6)+1,(rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1 }; 

更換與此:

int die[6] = {1, 2, 3, 4, 5, 6}; 
std::random_shuffle(die, die+6); 

下面的代碼運行良好對我來說:http://ideone.com/F4Eefj

+0

@Predictability該代碼適用於我。 – andre

+1

您的代碼將導致分佈不均勻。更好地使用'std :: random_shuffle'。 – fredoverflow

+0

@FredOverflow感謝您的建議,我更新了我的答案。你能解釋數據如何偏斜嗎?我根本不知道這個問題。 – andre

1

可以大大利用for循環簡化該代碼。例如,這是一個(這似乎是你手動做什麼)後面的陣列的每一個指數的各項指標進行比較:

#include <iostream> 

int main(int argc, char** argv) { 
    int die[] = { 4, 5, 6, 4, 5, 3 }; 
    const size_t LENGTH = 6; 

    for(size_t i = 0; i < LENGTH; ++i) { 
     for(size_t j = i + 1; j < LENGTH; ++j) { 
      if(die[i] == die[j]) { 
       std::cout << "Found a pair at (" << i << ", " << j << ")" << std::endl; 
      } 
     } 
    } 

    return 0; 
} 

dice()功能似乎要做到這一點,但你不能打電話它隨處可見。

+0

當我嘗試編譯時,我得到這個錯誤:dice.cpp:12:3:error:expected'unqualified-id before'for'dice.cpp:12:19:error:'i'does不命名類型dice.cpp:12:26:錯誤:'我'沒有命名類型dice.cpp:23:6:錯誤:預期的構造函數,析構函數或類型轉換之前'('令牌 – Predictability

+0

@Predictability它的工作原理爲了我。我用我用來編譯的完整代碼更新了我的答案(我基本上只是將它包裝在'main()'中,爲'cout'添加'#inc'並聲明爲'die' –

+0

也許你正在重新使用'我'或者在第一個for循環之前有其他類型的錯誤嗎?您將無法複製和粘貼此代碼,您需要了解它正在執行的操作並將其添加到您的代碼中。 –

相關問題