在其他计算发生时忽略用户输入

时间:2015-10-20 22:34:51

标签: c++ input cin getline ignore

我正在写一个连接4游戏,游戏的一般流程是:

  1. 询问用户想要玩的地方
  2. 播放用户移动
  3. 转到计算机的转弯
  4. 运行算法以决定计算机移动
  5. 玩电脑移动
  6. 重复
  7. 我遇到的问题是,当计算机决定移动时(可能需要10秒左右),如果用户输入任何信息并按下输入,则下次计算机运行该功能时要询问想要玩的地方的玩家,意外的价值被视为输入,然后游戏就会被破坏。

    因此,如果玩家要输入这个数据流:

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

    计算机将获取这5个输入并将其视为玩家输入的内容,作为他/她想要在接下来的5个回合中播放的列。

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

    以下是程序中main()函数的相关块:

    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(),但我只是认为我会包含整个代码块来提供一些上下文。如果更多代码会有所帮助,请告诉我们!

1 个答案:

答案 0 :(得分:1)

在调用playerTurn之前尝试使用cin.ignore()清除输入流,然后再提示输入