【问题标题】:User Input to a Value Stored in an Integer Array C++用户输入存储在整数数组 C++ 中的值
【发布时间】:2014-07-10 13:19:14
【问题描述】:

我试图做到这一点,所以每次用户输入一个值时,它都会存储在一个数组中的一个代表统计数据的地方。很难解释所以这里是代码:

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;
}

}

正如您可能注意到的,我试图让用户更改存储在 statArray[statInt] 中的健康值,它等同于 statArray[0],然后是 ++statInt。我的想法是我可以让用户一次输入他所有的统计数据。不是我的意图,而是将用户输入作为对数组槽的引用。 (statArray[0], statArray[1]) 等。而不是与该数组槽关联的 stat。

【问题讨论】:

    标签: c++ arrays integer


    【解决方案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]];
      }
    }
    

    【讨论】:

      【解决方案2】:

      更改statArraydefinition 以使用指针而不是值

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多