大家好,很抱歉,如果我的英语不太好。
我正在尝试制作一个包含5个玩家且每个玩家有5个随机整数的程序 总结每个球员。然后我想查看谁拥有最多积分并用信息打印他的名字。
我正在尝试:
for (int i=0;i<5;i++)
{
if (p[i].sum>p[i+1].sum)
{
strcpy(p[i].name,winner);
}
else strcpy(p[i+1].name, winner);
}
cout << "The winner is : " << winner << endl;
但胜利者的价值不会改变。 这是截图http://prntscr.com/abxqd3
提前谢谢。
答案 0 :(得分:0)
我认为首先应该修复你的逻辑错误。你只需比较玩家i和它的下一个玩家的总和。这没有意义。
例如,考虑你有这些总分8,3,1,4,6。所以在第一次迭代中,你设置了赢家,其名称为玩家0,其值为8,但在下一次迭代中设置为3,依此类推。在最后一次迭代中你得到了6分的球员的名字,但你应该有8分的球员。所以总是你有一个玩家名字,在数组的最后一个元素作为赢家之间得分较高。
您应该定义一个具有玩家类型的对象,用于存储最大总和如pmax的玩家,并将if条件更改为低于标准
if (p[i].sum>pmax.sum)
{
pmax.name=p[i].name;
pmax.sum=p[i].sum;
}
cout << "The winner is : " << pmax.name << endl;
答案 1 :(得分:0)
&#39;胜利者的价值&#39;因为你没有在任何地方修改它的价值而且你的代码找到最大元素的逻辑是不正确的,所以不会明显改变。如果您要查找最大值并将名称复制到获胜者变量,则应尝试此
int max = 0; // index of the largest sum, initially assumed to be 0
for (int i=1;i<5;i++)
{
if (p[i].sum>p[max].sum)
{
max = i;
}
}
strcpy(winner, p[max].name);
cout << "The winner is : " << winner << endl;