visual c++可变零校正

visual C++ Variable Zero Correction

本文关键字:c++ visual      更新时间:2023-10-16

变量"probability"总是显示为零,即使其他变量的输出与程序末尾的概率变量位于相同的放置区域。我有一种感觉,它与位置有关,但它可能是另一个初始化问题。概率永远不应该为零。

#include <iostream>
#include <cstdlib>  
#include <ctime>
#include <iomanip>
using namespace std;
int main() {
    int die1, 
        die2, 
        sum,
        turns,
        win=0,
        loss=0;
    double probability=0;
    int thepoint, rolls;
        srand(time(0));

    cout<<"How many turns would you like? ";
    cin>>turns;
    for(int i=0; i<turns; i++)
    {
        sum=0;
        die1=rand()%6;
        die2=rand()%6;
        sum=die1+die2;
        //cout<<"nFirst die is a  "<<die1<<endl;
        //cout<<"Second die is a "<<die2<<endl;
        //cout<<"nn>>>Turn "<<i<<": You rolled "<<sum;

        switch (sum){
            case 2: case 3: case 12:
                //cout<<"You have lost this turn with 2 3 or 12!"<<endl;
                loss++;
                break;
            case 7: 
                //cout<<"nYea! You won this turn with a 7 on the first roll!"<<endl;
                win++;
                break;      
            case 11:
                //cout<<"You won this turn ith 11!"<<endl;
                win++;
                break;
            default:
                //cout<<"nRolling again!"<<endl;
                thepoint=sum;
                rolls=1;
                sum=0;
                //cout<<"nRoll 1 - Your point is "<<thepoint<<endl;
                while (sum != thepoint)
                {
                    //srand(time(0));
                    die1=rand()%6;
                    die2=rand()%6;
                    sum=die1+die2;
                    rolls++;
                    //cout<<"Roll "<<rolls<<". You rolled "<<sum<<endl;
                    if (sum == thepoint)
                    {
                        //cout<<"You won this turn in the while with a point match!"<<endl;
                        win++;
                        break;
                    }
                    if (sum == 7)
                    {
                        loss++;
                        //cout<<"You lost this turn in the while with a 7"<<endl;
                        break;
                    }
                }
        }
    }
    probability = win/turns;
    cout<<"No. of Turns: "<<turns<<"n";
    cout<<"No. of Wins: "<<win<<"n";
    cout<<"No. of Loses: "<<loss;
    cout.precision(6);
    cout<<"nExperimental probability of winning: "<<fixed<<probability;
    cin.get();
    cin.get();
    return 0;
}

由于变量winturns的数据类型为int,并且probability是实数(即这里的double),在执行除法之前,您需要将其中至少一个转换为double

probability = (double)win/turns;

顺便说一句,如果需要,但不是真的需要,也可以同时使用winturns

mod 6操作% 6将给您一个范围在0..5之间的数字(除以6后的余数)。您需要将1添加到其中。

改变
die1=rand()%6;
die2=rand()%6;

die1=1+rand()%6;
die2=1+rand()%6;

更新:虽然这是一个bug,但它不是导致概率打印为零的根本原因,真正的问题是由@Tuxdude指出的。