使用C++模拟单掷骰子

single dice roll simulation with C++

本文关键字:掷骰子 模拟 C++ 使用      更新时间:2023-10-16

我正在编写一个程序来模拟具有随机函数的掷骰子。这是我的代码,但我有无限循环。该程序应该询问用户他们想掷骰子多少次。然后我使用 for 循环将骰子从 1 掷到 6我把所有这些都放在一个do-while中,以便只允许用户在1和6之间进行选择,如果选择在1到6之外,它应该说这是一个无效的选择。我不允许对此使用函数或数组

#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";
   }
}

你的条件语句: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);

无限循环是do - while ...

我不确定你在那里想做什么,但你在测试中总是会得到一个大于 1 或小于 6 的数字 - 你不能同时失败......