我想知道,在这种情况下是否可以使用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/

10-12 16:13