0

我正在使用 Code::Blocks 编写纸牌游戏。我似乎在使用这一功能时遇到了麻烦。出于某种原因,变量“卡片”在其中的某个地方被卡住了。继承人的代码:

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 语句。前两个 cout 看起来不错,但由于某种原因,第三个 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 回答