循环继续循环(C ++)

时间:2018-05-08 23:03:37

标签: c++

我对c ++还很陌生,只是尝试使用该语言。

我最近创建了一个' tictactoe'游戏。

我创建了这个简单的外观函数来获取用户板位置(从1到9)。它似乎工作正常,但我发现了一个奇怪的错误,所以称之为;

每当我输入一个12位数或更高的数字时,循环就会继续永久打印“无效位置!”'然后到下一行'选择你的位置1-9:'。

我正在使用visual studio编写代码。它是代码的东西还是完美的?我渴望从中学习。

这里的功能是:

int getUserPosition()
{
    int position;
    while (true)
    {
        cout << " Choose your position 1-9: " << endl;
        cin >> position;
        if (position < 1 or position > 9)
        {
            cout << "Invalid position!" << endl;
        }
        else if (board[position - 1] == 'X')
        {
            cout << "This position has been taken!" << endl;
        }
        else
        {
            return position;
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:3)

我终于明白了这里的实际行为。这是调用未定义的行为,而是定义了您不想要的行为。

cin >> position;

这试图读取你的12位数字,它不适合int,所以读取失败。因为格式错误失败,12位数字保留在缓冲区中,因此循环中的下一次传递尝试再次读取它。

当您打算读取键盘输入时,请始终使用cin::getline()cin中的错误/清除逻辑并非设计用于重新同步键盘输入,而是用于重新同步从无法读取错误消息的生成器输入的输入。将来,当您尝试将cin与管道一起使用时,最佳解决方案是检查cin::fail()并保留程序,如果它已设置。