用户输入存储在整数数组C ++中的值

时间:2014-07-10 13:19:14

标签: c++ arrays integer

我试图在每次用户输入值时都这样做,它存储在代表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])等。而不是与该数组槽相关联的统计数据。

2 个答案:

答案 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];