所以,我不想问,但是,我对此有些疑问,我是C++的新手,我才刚刚起步。大部分事情都完成了。期待一点事情。
第35-36行应计算平均值(出于某种原因,我无法使其正常工作。)
第41-47行应打印出头/尾巴精确到地的百分比至小数点后一位,然后打印出正确的*号以表示该百分比。
但是,当我运行它时,我的头/尾巴数弄乱了。以及我的百分比数字。我只是在寻找正确方向的 push 力。

#include <cstdlib>
#include <iostream>
#include <ctime>
#include <iomanip>
using std::cout; using std::cin; using std::endl;
using std::fixed; using std::setprecision;

int main()
{
srand(time(0));
int userInput,
    toss,
    headsCount,
    tailsCount;
double headsPercent = 0,
       tailsPercent = 0;

cout << "How many times do you want to toss the coin? ";
cin >> userInput;
while(userInput < 0)
{
    cout << "Please enter a positive number: ";
    cin >> userInput;
}

for(int i = 1; i < userInput; i++)
{
    toss = rand() % 2;
    if(toss == 0)
        headsCount++;
    else
        tailsCount++;
}

headsPercent = userInput / headsCount * 100;
tailsPercent = userInput / tailsCount;

cout << "Heads: " << headsCount << endl
     << "Tails: " << tailsCount << endl << endl;

cout << "Heads Percentage: " << fixed << setprecision(1) <<  headsPercent << " ";
for(int b = 0; b < headsPercent; b++)
    cout << "*";

cout << "\nTails Percentage: " << tailsPercent << " ";
for(int b = 0; b < tailsPercent; b++)
    cout << "*";
return 0;
}

最佳答案

欢迎使用C++。您需要初始化变量。您的编译器应该警告您,您正在使用变量而未对其进行初始化。当您不初始化值时,您的程序将具有未定义的行为。

我说的是headsCounttailsCount。这样的事情应该没问题:

int headsCount = 0, tailsCount = 0;

还要注意,循环应从0开始,而不是1,因为在最终条件下使用<运算符。

最后,您的百分比计算是倒数。它应该是:
headsPercent = headsCount * 100 / userInput;
tailsPercent = tailsCount * 100 / userInput;

现在,由于使用整数除法,可能会发生奇怪的事情。也就是说,您的百分比可能不等于100。这里发生的是整数截断。请注意,我首先使用100x比例尺隐式处理了其中一些问题。

或者,由于百分比本身是double,您可以通过强制转换其中一个操作数来强制将计算为double,从而避免整数截断:
headsPercent = static_cast<double>(headsCount) / userInput * 100;

实际上,由于只有两种可能是正面和反面,因此您只需要数一数即可。然后,您可以执行以下操作:
tailsPercent = 100 - headsPercent;

关于c++ - 计算百分比时有垃圾编号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35353469/

10-16 02:19