c++ - C++ CTRL+Z 使程序无限循环

标签 c++ loops

好的,我这里有问题。我正在制作幻灯片益智游戏。玩家被问到他想移动哪一 block ,直到拼图被解决。如果玩家之前想退出,输入Qq 然后按enter 即可。该程序运行良好。但是我遇到了一个问题:如果我插入 CTRL+Z,程序将意外地循环...

这是一段重要的代码:

        // analyzes user input
        if (piece_to_move_string == "q" ||
            piece_to_move_string == "Q")
        {
            cout << endl << "You chose to quit." << endl;
            pressanykey();
            break;
        }
        else
        {
            piece_to_move = atoi(piece_to_move_string.c_str());

            if (1 <= piece_to_move && piece_to_move <= pow(puzzle_size,puzzle_size))
            {
                game_board = move_piece (game_board, piece_to_move);
            }
            else
            {
                cout << "Not possible.";
            }
        }

编辑:但仍然不起作用..

// analyzes user input
        if (piece_to_move_string == "q" ||
            piece_to_move_string == "Q")
        {
            cout << endl << "You chose to quit." << endl;
            pressanykey();
            break;
        }
        else if (cin.eof())
        {
            //do nothing
        }
        else
        {
            piece_to_move = atoi(piece_to_move_string.c_str());

            if (1 <= piece_to_move && piece_to_move <= pow(puzzle_size,puzzle_size))
            {
                game_board = move_piece (game_board, piece_to_move);
            }
            else
            {
                cout << "Not possible.";
            }
        }

最佳答案

Ctrl+Z 表示“文件结尾”(假设您使用的是 Windows),所以一旦用户点击它,您的 cin 就处于不可读状态。检查 cin.eof():

if (cin.eof() || piece_to_move_string == "q" ||
                 piece_to_move_string == "Q")
{
    cout << endl << "You chose to quit." << endl;
}

关于c++ - C++ CTRL+Z 使程序无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15579257/

相关文章:

c++ - 将整数转换为字符缓冲区以进行串行通信...?

c++ - 检查 std::move 是否在容器上完成

c++ - 巨大阵列中的访问冲突?

C++ while循环从输入文件中读取

python - 如何循环遍历列表?

java - 如果最后一个条件失败,如何重新启动 do-while 循环?

c++ - Mac(或 C++)连接到二进制 WCF

c++ - 如何将 unique_ptr 移动到原始指针?

javascript - 数组 - 查找序列中缺失的数字

loops - 在go模板中获取迭代器索引(consul-template)