我想知道,在这种情况下是否可以使用goto ok?您能提出更好的解决方案吗?我看到唯一一个在第二次获得第二名的人,但是有必要两次调用“makeMove”。
void BoardView::startGame()
{
int currStep=0;
int x,y;
while (board_->isWin()==none)
{
currStep++;
show();
wrong:
std::cout << " Player " << (currStep%2==0 ? 1 : 2) << ": ";
std::cin >> x;
y=x%10;
x/=10;
if (!board_->makeMove(x,y,(currStep%2==0 ? cross : zero)))
{
std::cout << "Wrong move! Try again.\n";
goto wrong;
}
}
}
最佳答案
不要使用goto
。成功移动后,请使用while (true)
循环并从其中删除break
。
while (true) {
std::cout << " Player " << (currStep%2==0 ? 1 : 2) << ": ";
std::cin >> x;
y=x%10;
x/=10;
if (board_->makeMove(x,y,(currStep%2==0 ? cross : zero)))
break;
std::cout << "Wrong move! Try again.\n";
}
关于c++ - 在这种情况下我可以使用goto吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9666548/