1

プログラムを実行すると、Eclipse CDTで次のようになります。

There are 11 sticks left.

3
Enter Move:*stopped,reason="end-stepping-range",frame={addr="0x004015b4",func="_fu4___ZSt3cin",args=[],file="..\src\PlayerUser\PlayerUser.cpp",fullname="C:\Users\...\Desktop\workspace_eclipse\StickGame\src\PlayerUser\PlayerUser.cpp",line="26"},thread-id="1",stopped-threads="all"

「Enter Move」まではすべて意味がありますが、残りは意味がありません。これが発生した後も、入力を許可し続けますが、プログラムがフリーズしているようです。

たくさんのコードがあるので、関連する部分だけを以下に示します。

主な機能:

int main() {
    int sticks = 10;

    PlayerUser u(sticks);
    PlayerComputer c(sticks);

    StickGame game (u, c);
    game.startGame(11);
    return 0;
}

関数: PlayerUser::getMove

int PlayerUser::getMove(int n_left){
int on = 0;

while(true){
    cout << "There are " << n_left << " sticks left." << endl;
    cout << "Enter Move:" << flush; //where error occurs 
    cin >> on;
    if(on <= 3 && on >= 1)
        break;
}

setMove(n_left, on);
return on;
}

私が見つけたものから、「冗長コンソールモード」と関係があるようですが、それが何であるか、またはそれを修正する方法がわかりません。

4

1 に答える 1

1

coutの直後にcinを使用するたびにデバッガーで同じ問題が発生し、最終的に<< endl;を追加して解決しました。けいれん

bool isDone()
    {
        char c;
        cout << "Enter 'Y' if food is done:";
        cin >> c;
        return ((c == 'Y') || (c == 'y'));
    }

これにより、次のようなエラーが生成されました。

*stopped,reason="end-stepping-range",frame=...

しかし、これはうまく機能しています:

bool isDone()
    {
        char c;
        cout << "Enter 'Y' if food is done:" << endl;
        cin >> c;
        return ((c == 'Y') || (c == 'y'));
    }
于 2013-06-19T09:35:51.860 に答える