Я сделал простую игровую программу, и требование требует, чтобы игрок мог отменить несколько ходов (отменить n).
Я прошу пользователя ввести команду (отменить n), и он берет заднюю половину и помещает ее в int. По сути, я хочу, чтобы программа останавливала пользователя, если он ввел что-либо, кроме числа. Поэтому, если пользователь набрал undo f, он не преобразует f в числовую форму (по крайней мере, я так думаю), но вызовет ошибку. Я искал некоторое время и не мог найти ничего, что работало или имело смысл для меня.
try {
int undo;
istringstream is(userInput.substr(5, userInput.length()));
is >> undo;
for (int numOfUndos = undo; numOfUndos > 0; numOfUndos--) {
board.UndoLastMove();
}
moveValidated = true;
}
catch (exception &e) {
cout << "/-----------------------------/" << endl;
cout << e.what() << endl;
cout << "/-----------------------------/" << endl;
}
Если возможно, я хотел бы просто использовать то, что у меня есть сейчас, или с cin. Кроме того, простите меня, но я все еще изучаю С++ и не знаю многих продвинутых методов, поэтому, если есть сложный способ сделать это, простите меня, если мне потребуется немного времени, чтобы понять.
Спасибо за любую помощь заранее.
if (is >> undo) { worked } else { failed }
Выдает ли UndoLastMove исключение? - person Neil Kirk   schedule 17.11.2014undo
ничего не извлекается.undo
сохранит свое неинициализированное значение, а затем будет запущен цикл for с использованием этого значения, что является неопределенным поведением. Вот почему вы должны проверять свой ввод с помощью условного оператора, как показывает Нил Кирк. - person 0x499602D2   schedule 17.11.2014is >> undo;
перед добавленным условным оператором. Я реализовал это, и это сработало. Спасибо. - person Thomas Brooks   schedule 17.11.2014