0

Code::Blocks を使用してカード ゲームを作成しています。この1つの機能に問題があるようです。何らかの理由で、変数「カード」がこのどこかでごちゃごちゃになっています。コードは次のとおりです。

void prompt(int &space, int &card, bool checkS[9], bool checkC[4]){

do{
    cout << "\n\nSelect a card: ";
    cin >> card;

    if(checkC[(card - 1)] == true || card < 1 || card > 4)
        cout << "Invalid selection. ";

}while(checkC[(card - 1)] == true || card < 1 || card > 4);

do{
    cout << "\n\nSelect a space: ";
    cin >> space;

    if(checkS[(space - 1)] == true || space < 1 || space > 9)
        cout << "Invalid selection. ";

}while(checkS[(space - 1)] == true || space < 1 || space > 9);

cout << "\n\n";

cout << card << " / " << space << endl;

card -= 1;
space -= 1;

cout << card << " / " << space << endl;

checkC[card] = true;
checkS[space] = true;

cout << card << " / " << space << endl;
}

テスト用に作成した 3 つの cout ステートメント。最初の 2 つの cout は問題ないように見えますが、3 番目の cout では、何らかの理由で変数「card」が風変わりな @ss 番号になっています。何か案は?

編集:これが私が彼の機能を呼んでいる方法です。

prompt(boardSpace, cardFromHand, &checkS[9], &checkC[4]);
4

1 に答える 1

0

機能は(ほとんど)問題ありません。呼び方に問題がある可能性が高いです。特に、checkSおよび/またはcheckCおそらくそれらに十分なメモリが割り当てられていないため、それらを変更しようとするとメモリが破損します

checkC[card] = true;
checkS[space] = true;

PSこれがあなたの問題と関係がある可能性はほとんどありませんが、

while(checkC[(card - 1)] == true || card < 1 || card > 4);

する必要があります

while(card < 1 || card > 4 || checkC[(card - 1)] == true);

つまり、への索引付けに使用するcard checkCに確認してください。

同じ問題が他のいくつかの場所で発生します。

編集あなたは言う:

私はそれを次のように呼んでいます:

prompt(boardSpace, cardFromHand, &checkS[9], &checkC[4]); 

checkScheckCが正しいサイズの配列である場合、上記は単純に次のようになります。

prompt(boardSpace, cardFromHand, checkS, checkC); 

それ以外の場合は、ポインターを両方の配列の先頭ではなく末尾に渡します。

于 2013-05-08T05:51:27.833 に答える