我试图在每次用户输入值时都这样做,它存储在代表stat的地方的数组中。很难解释所以这里是代码:
void MainChar::CharacterCreation()
{ int statPoints = 20;
int health = 0;
int magicDamage = 0;
int magicResist = 0;
int physicalResist = 0;
int physicalDamage = 0;
int magicOffMastery = 0;
int physicalOffMastery = 0;
int magicDefMastery = 0;
int physicalDefMastery = 0;
// SETS STATS AND THIER RESPECTIVE ARRAY PLACEMENT
int statArray[9];
statArray[0] = health;
statArray[1] = magicDamage;
statArray[2] = magicResist;
statArray[3] = physicalResist;
statArray[4] = physicalDamage;
statArray[5] = magicOffMastery;
statArray[6] = physicalOffMastery;
statArray[7] = magicDefMastery;
statArray[8] = physicalDefMastery;
std::string stats[9];
stats[0] = "Health : " ;
stats[1] = "Magic Damage : " ;
stats[2] = "Magic Resist : " ;
stats[3] = "Physical Resist : " ;
stats[4] = "Physical Damage : " ;
stats[5] = "Magic Offensive Mastery : " ;
stats[6] = "Physical Offensive Mastery : ";
stats[7] = "Magic Defensive Mastery : " ;
stats[8] = "Physical Defensive Mastery : ";
int statString = 0;
int statInt = 0;
while (statPoints > 0)
{
std::cout << "*******************************************************************************" << std::endl;
std::cout << "* *" << std::endl;
std::cout << "* CHARACTER CREATION *" << std::endl;
std::cout << "* *" << std::endl;
std::cout << "*******************************************************************************" << std::endl;
std::cout << " Health : " << health * 10 << std::endl;
std::cout << std::endl;
std::cout << " Magic Damage : " << magicDamage << std::endl;
std::cout << std::endl;
std::cout << " Magic Resist : " << magicResist << std::endl;
std::cout << std::endl;
std::cout << " Physical Resist : " << physicalResist << std::endl;
std::cout << std::endl;
std::cout << " Physical Damage : " << physicalDamage << std::endl;
std::cout << std::endl;
std::cout << " Magic Offensive Mastery : " << magicOffMastery << std::endl;
std::cout << std::endl;
std::cout << " Physical Offensive Mastery : " << physicalOffMastery << std::endl;
std::cout << std::endl;
std::cout << " Magic Defensive Mastery : " << magicDefMastery << std::endl;
std::cout << std::endl;
std::cout << " Physical Defensive Mastery : " << physicalDefMastery << std::endl;
std::cout << "*******************************************************************************" << std::endl;
std::cout << "STAT POINTS: " << statPoints << std::endl;
std::cout << stats[statString] ;
std::cin >> statArray[statInt] ;
statPoints -= statArray[statInt];
++statString;
++statInt;
}
}
正如您可能会注意到的那样,我正在尝试让用户更改health的值,该值存储在statArray [statInt]中,该值等于statArray [0],然后是I ++ statInt。我的想法是,我可以让用户一次输入一个他的统计数据。而不是我的意图,发生的是它将用户输入作为对阵列槽的引用。 (statArray [0],statArray [1])等。而不是与该数组槽相关联的统计数据。
答案 0 :(得分:1)
要实现您想要的目标,您可以使用联合:
union Stat {
struct {
int health;
int magicDamage;
int magicResist;
// ...
};
int array[3];
};
int main() {
Stat stat;
stat.array[1] = 42;
cout<<stat.magicDamage<<endl; // should give 42
};
然而,更好的解决方案是使用地图:
map<string,int> stat;
const char *keys[] = {"health","magicDamage","magicResist"};
int main() {
for (int i=0;i<3; ++i) {
cout<<"enter "<<keys[i]<<endl;
cin>>stat[keys[i]];
}
}
答案 1 :(得分:0)
将statArray
定义更改为使用指针而不是值
int *statArray[9];
statArray[0] = &health;
statArray[1] = &magicDamage;
statArray[2] = &magicResist;
statArray[3] = &physicalResist;
statArray[4] = &physicalDamage;
statArray[5] = &magicOffMastery;
statArray[6] = &physicalOffMastery;
statArray[7] = &magicDefMastery;
statArray[8] = &physicalDefMastery;
并更新下一行:
std::cout << *stats[statString] ;
std::cin >> *statArray[statInt] ;
statPoints -= *statArray[statInt];