Вопрос
Я работаю над моим C ++ по поводу футбола, и я столкнулся с проблемой с картой.
Моя проблема, которую я столкнулся с тем, что когда я сохранил 2 или более «полузащиты» в качестве ключа, даже Cout данных показывает разные, но когда я делаю умножение на 2-е -> второе значение, он «добавляет» первым -> второе значение и умножить на него.
Например
John midfielder 1
Steven midfielder 3
У меня есть программа, которая уже читает в проигрывателе. Так что карта идет так:
John 1 (Key, Value)
Steven 3 (Key, Value)
if(playerName == a->first && playerPosition == "midfielder")
{
cout << a->second*2000 << endl; //number of goals * $2000
}
Так что по праву, программа должна выводиться:
2000
6000
Но вместо этого я получаю
2000
8000
Итак, я предполагаю, что он добавляет 1-3 (в результате чего 4) и умножается с 2000, что совершенно неверно ...
Я попробовал Cout A-> First и A-> вторым в программе, и я получаю:
John 1
Steven 3
Но после умножения это совершенно другое. Любые идеи?
Спасибо.
Редактировать: Хорошо, я пытаюсь. Я на самом деле расчет бонуса для каждого поля позиции. Я уже вставил данные поля на карту, и вот фактические коды.
multiset<string, less<string> >::iterator q, p = myset.begin();
q = myset.begin()++;
while (p != myset.end())
{
if(*p == *q)
{
currentScore = (int) myset.count(*p);
mymap.insert(pair<string, int>(*p, currentScore));
}
else if(*p != *q && topScore == 0)
{
topScore = (int) myset.count(*q);
topScorer = *q;
mymap.insert(pair<string, int>(*q, topScore));
}
else if(*p != *q)
{
currentScore = (int) myset.count(*p);
mymap.insert(pair<string, int>(*p, currentScore));
if(currentScore > topScore)
{
topScore = currentScore;
topScorer = *p;
mymap.insert(pair<string, int>(*p, topScore));
}
}
p++;
}
map<string, int>::iterator a = mymap.begin();
while(a != mymap.end())
{
if(playerName == a->first && playerPosition == "goalkeeper")
{
goalkeepers++;
goalkeeperBonus+=(a->second*5000);
sumBonus+=goalkeeperBonus;
}
else if(playerName == a->first && playerPosition == "midfielder")
{
midfielders++;
midfielderBonus+=(a->second*2000);
sumBonus+=midfielderBonus;
}
a++;
}
Тестовые данные:
Score: 3-1
Ben
Steven
Ben
Score: 2-0
John
Steven
Score: 1-0
Ben
Score: 0-0
Score: 1-1
Cole
Score: 1-2
Ben
Score: 3-0
Cole
Steven
Ben
Я пытался выться во время цикла, и я получил вывод как:
Ben 5
Cole 2
John 1
Steven 3
Это должно быть правильным выходом с Стивеном, имеющим 3 гола. Но я получаю 4, добавил с Джоном. Есть ли способ назначить бонус A-> первым, который является именем игрока?
Решение
midfielderBonus+=(a->second*2000);
Так что + = означает, что он накопит данные. Я предполагаю, что вы забываете midfielderBonus=0
В какой-то момент, когда вы переходите к следующему игроку. Вроде трудно сказать, как включенный вами фрагмент кода не показывает инициализацию бонусных переменных.
Другие советы
Я ничего не вижу в вашем включенном коде, который приведет к тому, что вы получаете. Там, конечно, очевидно, больше продолжается, что может объяснить это, особенно с тех пор, как вы должны, по-видимому, только подать заявку на одного игрока.