прекращение вызова после создания экземпляра int - PullRequest
0 голосов
/ 28 декабря 2018

когда я пытаюсь ввести плохое имя (не цифра или алфавитная цифра), я хочу выбросить исключение.в первый раз он работает хорошо, но когда я снова вхожу в функцию из вызова catch и снова вводю плохое имя, я получаю эту ошибку: прекращение вызывается после выброса экземпляра 'int' '

int main(int argc, char *argv[]) {
    int numberOfWarrior = atoi(argv[1]);
    int numberOfthief = atoi(argv[2]);
    int numberOfnecromancer = atoi(argv[3]);
    int vecorSize = numberOfnecromancer + numberOfthief + numberOfWarrior;
    vector<Hero*> turnOfPlayer;
    //Enter Warrion Players
    if(numberOfWarrior>0) {
        try {
            enterWarrior(0, turnOfPlayer, numberOfWarrior,"warrior");
            }
        catch (int i) {
            cout << "Invalid name of user. You can only choose letters or numbers. Try again please." << endl;
            enterWarrior(i, turnOfPlayer, numberOfWarrior, "warrior");  // my program terminate when i enter to function from here
        }
    }

void enterWarrior(int index, vector<Hero*> v,int numOfWarrior, std::string Type)
{
    std::string nameOfwarrior;
    for(int i=index; i<numOfWarrior; i++)
    {
        cout << "Please insert " << Type << " number " << i+1 << " name:";
        cin >> nameOfwarrior;
        if(!digitCheck(nameOfwarrior))
            throw i;  // in the second time i get the error here 
        if(Type.compare("warrior")==0) {
            Warrior *warr = new Warrior(nameOfwarrior);
            v.push_back(warr);
        }
        if(Type.compare("thief")==0) {
            Thief *thief = new Thief(nameOfwarrior);
            v.push_back(thief);
        }
        if(Type.compare("necromancer")==0) {
            Necromancer *nec = new Necromancer(nameOfwarrior);
            v.push_back(nec);
        }
    }
}

я понятия не имею, как я могу решить это спасибо

1 Ответ

0 голосов
/ 28 декабря 2018

, как было сказано в примечании, просто используйте цикл, например:

if(numberOfWarrior>0) {
  int firstIndex = 0.

  for (;;) {
    try {
      enterWarrior(firstIndex, turnOfPlayer, numberOfWarrior,"warrior");
      // if we are here that means all is ok, go out of the loop
      break;
    }
    catch (int i) {
      cout << "Invalid name of user. You can only choose letters or numbers. Try again please." << endl;
      firstIndex = i;
    }
  }
}

Предупреждение в void enterWarrior(int index, vector<Hero*> v,int numOfWarrior, std::string Type), вектор задается значением, поэтому enterWarrior изменяет копия вектора, поэтому измените его на void enterWarrior (int index, vector & v, int numOfWarrior, std :: string Type) `

Type.compare("warrior")==0 и т. Д. Не очень легко прочитать, вы можете заменить их на (Type == "warrior") и т. д., мы на C ++, а не на Java

Некоторые 'if' могут быть 'else if', чтобы ничего не сравнивать, когда предыдущее 'if' было истинным.Окончательный else кажется отсутствующим также в случае, если Type не является ожидаемым, чтобы указать на проблему независимо от того, как

...