C ++网球比分跟踪器

时间:2019-03-05 18:54:26

标签: c++

对大学的C ++课程进行了介绍,我们得到了这个项目来为网球游戏“建模”。

用户首先需要输入玩家a获胜的概率。 然后生成一个介于1到100之间的数字,直到一个玩家获得4分以上,并且比其他玩家多获得2分。

我的问题是,有时胜率在50%左右时,输出为4-4。

我想知道为什么会这样吗? 任何帮助将不胜感激!

    int prob; 
    int scoreA = 0; 
    int scoreB = 0; 
    int randNB = 0; 

srand(time(NULL)); 

cout <<"---------------\n"
        "FAKE TENNIS!\n"
        "---------------" <<endl;
cout <<"What is the chance that player \'A\' will win a point?(Enter whole #between 1 - 100): " ;
    cin >> prob;
do{
if((scoreA >= 4 || scoreB >= 4) && ((scoreA - scoreB) >= 2 || (scoreB - scoreA) >= 2)) break; 
randNB = rand()%100+1;

    if (randNB <= prob){
        cout<<"A";
        scoreA++;
    }
    else if(randNB > prob){
        cout<<"B";
        scoreB++;
    }


}        
while((scoreA <= 3|| scoreB <= 3) && ((scoreA - scoreB) !=2 || (scoreB - scoreA) !=2 ));

cout<<"The final score is " <<scoreA <<" (A) - " << scoreB <<" (B)" <<endl;
if(scoreA > scoreB){
    cout <<"A is the winner!!!";
}
else{
    cout <<"B is the winner!!!";
}

return 0;
}

1 个答案:

答案 0 :(得分:0)

您已经编写了两次结束循环测试。

在循环中一次(正确)为正,在循环结束时一次为负。

1)只写一次。 (“中断”将结束循环。)也就是说,将do {...} while(...)替换为while(true){...}

2)如果要编写两次,请在第二个测试中检查<2而不是!= 2。 x> = 2的取反不是x!= 2