所以,我不想问,但是,我对此有些疑问,我是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++。您需要初始化变量。您的编译器应该警告您,您正在使用变量而未对其进行初始化。当您不初始化值时,您的程序将具有未定义的行为。
我说的是headsCount
和tailsCount
。这样的事情应该没问题:
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/