1

ここで問題があります。スライドパズルゲームを作っています。プレイヤーは、パズルが解けるまでどのピースを動かしたいか尋ねられます。プレーヤーが前に終了したい場合は、入力Qまたはqを押して終了enterします。プログラムは問題なく動作します。しかし、私には1つの問題があります。挿入するCTRL+Zと、プログラムがloop予期せず...

これは重要なコードです。

        // 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.";
            }
        }
4

1 に答える 1

6

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;
}
于 2013-03-22T20:25:56.987 に答える