c++ - 在进行其他计算时忽略用户输入

标签 c++ input cin getline

我在写一个连连看4的游戏,游戏的大致流程是:

  1. 询问用户想在哪里玩
  2. 下棋
  3. 转到电脑上
  4. 运行算法来决定计算机移动
  5. 玩电脑走棋
  6. 重复

我遇到的问题是,当计算机决定其移动(可能需要 10 秒左右)时,如果用户输入任何信息并按回车键,下一次计算机运行询问的功能玩家想要玩的地方,意外的值被作为输入,然后游戏就毁了。

例如,如果玩家要输入此数据流:

1(返回) 4(返回) 2(返回) alskdf(返回) jklgo[2(返回)

计算机会接受这 5 个输入,并将它们视为玩家输入的内容,作为他/她想在接下来的 5 个回合中玩的列。

我需要的是在另一个函数执行计算时忽略任意数量的用户输入的方法,但是一旦该函数完成计算所需的内容,从那时起直到再次调用该计算函数的任何用户输入都应该是被视为有效输入。

这是程序中 main() 函数的相关 block :

while (turn < w_*h_)
{
    if (whosTurn == 1) //player's turn
    {
        playerTurn(board, rowPlayed, colPlayed); //function that asks for user input
        printScreen(board);
        if (printWin(board, rowPlayed, colPlayed, pDisc)) break;
    }

    else if (whosTurn == 2) //computer's turn
    {
        compTurn(board, rowPlayed, colPlayed); //function that does the long calculations
        printScreen(board);
        cout << "The computer played in column ";
        printColor(colPlayed+1, GREEN);
        cout << "\n\n";
        if (printWin(board, rowPlayed, colPlayed, cDisc)) break;
    }

    if (whosTurn == 1) whosTurn = 2;
    else whosTurn = 1;

    turn++;
}

与我的问题相关的部分是 playerTurn()compTurn()

最佳答案

在调用 playerTurn 之前尝试 cin.ignore() 在提示更多输入之前清除输入流

关于c++ - 在进行其他计算时忽略用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33247989/

相关文章:

css - 输入类型 ="text": displaying right part of content without rtl

C++:将一个部分特化设置为等于另一个

c++ - 使用 C++ 使用 Z3 定义集合论

c++ - 是否有其他订单的平方根函数?

c++ - 在 do/while 循环中跳过 Cin 输入

c++ - while 循环跳过行

c++ - 无法重载 [] 运算符

c++ - 将一个字符串解析为多个字符串

jQuery - 在所有输入都获得焦点后删除Class?

java - 扫描仪类的 hasNext() 无限循环