2017-10-08 42 views
-2

我寫一個程序來模擬隨機功能的骰子。 這是我的代碼,但我有無限循環。 程序應該詢問用戶他們想擲骰子的次數。 然後我用一個for循環來從1骰子翻滾至6 和我把所有的在一個做而爲了只允許用戶1和6之間進行選擇,如果選擇爲1以外〜6它應該說這是一個無效的選擇。 我不能使用功能或數組這個單骰模擬與C++

#include<iostream> 
#include <iomanip> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 

int main() 
{ 
    //i is the counter for the loop 
    int i = 0; 
    //store total count for landing number 
    int num1 =0; 
    int num2 =0; 
    int num3 =0; 
    int num4 =0; 
    int num5 =0; 
    int num6 =0; 

    int Num1 =0; 
    int Num2 =0; 
    int Num3 =0; 
    int Num4 =0; 
    int Num5 =0; 
    int Num6 =0; 
    int randNum; 
    int times; 


    //User selection 
    int selection; 


    /* initialize random seed: */ 
    srand ((unsigned int)time(NULL)); 

    /* generate random number: */ 
    randNum = rand() % 6 + 1; 

    cout<<"How many times would you like to roll the dice? " << endl; 
    cin >> selection; 

    do{ 
     for(i = 1; i <= selection; i++) 
     { 

      if(randNum==1) 
      { 
       num1++; 
      } 
      else if(randNum==2) 
      { 
       num2++; 
      } 
      else if(randNum==3) 
      { 
       num3++; 
      } 
      else if(randNum==4) 
      { 
       num4++; 
      } 
      else if(randNum==5) 
      { 
       num5++; 
      } 
      else if(randNum==6) 
      { 
       num6++; 
      } 
     } 
    Num1 = num1/times *100; 
    Num2 = num2/times *100; 
    Num3 = num3/times *100; 
    Num4 = num4/times *100; 
    Num5 = num5/times *100; 
    Num6 = num6/times *100; 


    cout <<"# Rolled \t # Times \t % Times" << endl; 
    cout <<"----- \t ------- \t -------" << endl; 
    cout <<" 1 \t " << num1 << "\t " << fixed << setprecision(2) << Num1 << "%\n"; 
    cout <<" 2 \t " << num2 << "\t " << fixed << setprecision(2) << Num2 << "%\n"; 
    cout <<" 3 \t " << num3 << "\t " << fixed << setprecision(2) << Num3 << "%\n"; 
    cout <<" 4 \t " << num4 << "\t " << fixed << setprecision(2) << Num4 << "%\n"; 
    cout <<" 5 \t " << num5 << "\t " << fixed << setprecision(2) << Num5 << "%\n"; 
    cout <<" 6 \t " << num6 << "\t " << fixed << setprecision(2) << Num6 << "%\n"; 
    } 

    while(i >= 1 || i <= 6); 
    { 
     cout << "This is an invalid number. \n" 
     << "The number of rolls should be equal to or greater than 1.\n" 
     << "Please enter again.\n"; 
    } 
} 
+0

似乎要檢查有效輸入你做的所有其他工作和輸出之前。你可能會考慮一個數組,這將是更簡單的代碼。當你使用它時,'times'是未初始化的,整數數學會給你不正確的值。您也可以將骰子放在for循環中。 –

+1

當你使用你的調試器來執行你的代碼時,一次一行,代碼執行你的「無限循環」的原因是什麼? –

+0

嗨,我不允許使用數組或函數來代碼 – codeeeeeNOT

回答

0

的無限循環是do - while ...

我不知道你想幹什麼那裏,但你會總是得到一個數字大於1或小於6的測試 - 你不能不都...

2

你的條件語句:i = 1; i <= selection; i++應該走在最後,而你有。

嘗試:

do { 
    if (randNum==1) { 
     num1++; 
    } else if(randNum==2) { 
     num2++; 
    } else if(randNum==3) { 
     num3++; 
    } else if(randNum==4) { 
     num4++; 
    } else if(randNum==5) { 
     num5++; 
    } else if(randNum==6) { 
     num6++; 
    } 
    i += 1; 
} while (i <= selection);