2012-02-15 66 views
0

我有一個簡單的骰子投擲項目與投注單位,一切都該代碼...你打賭,如果你得到它的權利你得到你下注的金額次您選擇骰子的數量......如果你錯了,而是由一個小(在你選擇數量之和的範圍 - 骰子ü拿起數)你不會失去任何東西,如果你真的關閉你失去...while循環出毛病了......沒有做它應該出於某種原因

我有一個while循環,基本上保持2個幾點:只要用戶要麼具有總線或者如果他們不輸入「無」或「否」爲重試。 ..但由於某種原因,它只是不工作......大聲笑。任何想法爲什麼?投注系統的工作原理,它承認betting.currentBU == 0,但while循環就不會發生反應笑。

#include <iostream> 
#include <string> 
#include <cstdlib> 
#include <time.h> 
#include <limits> 

using namespace std; 

struct Dices{ // structure containing all the dice related integers 
    int dice; 
    int total; 
    int choice; 
} Dices = {0,0,0}; 

struct betting{ // structure containing all the betting integers 
    int currentBU; 
    int bettedBU; 
} betting = {100, 0}; 


int DiceThrow(int dicechoice, int totalnum){ // a method for the dice being rolled 
    for(int i=1; i <= dicechoice;i++){ 
      totalnum = totalnum + (rand() % 6 + 1); //total number, repeated by the loop for every dice 
     } 
    return totalnum; 
} 

int winningbet(int dicea, int cBU, int bBU){ // in case the user guesses it right 
    std::cout << "Congratulations, you got it right! \n"; 
    cBU = cBU + (dicea * bBU); // give him money... 
    return(cBU); 
} 
int losingbet(int dicen, int totaln, int choicen, int cBU2, int bBU2){ //in case the user guesses wrong 
    if(choicen > (totaln+dicen) || choicen < (totaln+dicen)) // checks how wrong he is, if he's too off, he loses BUs 
     cBU2 = cBU2-bBU2; 
    else 
     std::cout << "you we're so close, you don't lose any BUs! \n"; //if he was really close, just let him know he was close 
    return(cBU2); 

} 

int main(){ 
    string decision; // decision if they want to keep playing or not 
    srand ((unsigned int)time(NULL)); 
    while(decision != "no" || decision != "No" || betting.currentBU != 0) // makes sure of the decision AND that he still has BUs 
    { 
     Dices.total = 0; 
     std::cout << "how many dice would you like to use? "; 
     std::cin >> Dices.dice; 
     std::cout << "how many How many BUs are you betting?(" << betting.currentBU << " BUs left) "; 
     std::cin >> betting.bettedBU; 
     if(betting.bettedBU > betting.currentBU){ // if he doesn't have enough BUs 
      std::cout << "Sorry, you don't have that many BUs..."; 
      std::cout << "Want to try again with a different amount?(Yes/No) "; 
      std::cin >> decision; 
     } 
     else{ 
      std::cout << "guess what number was thrown: "; 
      std::cin >> Dices.choice; 
      Dices.total = DiceThrow(Dices.dice, Dices.total); 
      if(Dices.choice == Dices.total){ 
       betting.currentBU = winningbet(Dices.dice, betting.currentBU, betting.bettedBU); 
       std::cout << "Want to try again?(Yes/No) "; 
       std::cin >> decision; 
      } else{ 
       std::cout << "Sorry, the number was " << Dices.total << "... better luck next time \n" ; 
       betting.currentBU = losingbet(Dices.dice, Dices.total, Dices.choice, betting.currentBU, betting.bettedBU); 
       if(betting.currentBU > 0){ 
        std::cout << "Want to try again?(Yes/No) "; 
        std::cin >> decision; 
       } 
      } 

     } 
    } 
    if(betting.currentBU == 0){ 
     std:cout << "sorry, you ran out of BUs..."; 
     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    } 
    else{ 
     std::cout << "your final BU count is: " << betting.currentBU << "\n"; 
     std::cout << "Thanks for playing, see you next time! (Press ENTER to terminate...)"; 
     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    } 
    return 0; 

} 
+0

到底是什麼問題了嗎?它不認可你的輸入嗎?你沒有真正定義你遇到的問題,只是你有問題。 – Pochi 2012-02-15 03:11:48

回答

3

是不是應該是:

while(decision != "no" && decision != "No" && betting.currentBU != 0) 

我們需要檢查,如果決定不等於「否」,不等於「無」和currentBU不等於0

+0

yessir ......我困惑的邏輯||用&&​​ ...謝謝;) – 2012-02-15 03:41:31

3

您的測試是while (A || B || C),這將循環只要在任何的這三樣東西是真實的。由於decision不能等於兩個"no""No"在同一時間,這兩個中的至少一個未等於測試將永遠是正確的,那麼循環將永遠循環下去......

+0

感謝您的回答;)是啊,我絕對感到困惑的邏輯||與&& ... smdh。 – 2012-02-15 03:41:58