我正在使用Code :: Blocks来编写纸牌游戏。我似乎遇到了这个功能的问题。出于某种原因,变量'card'在此处的某处被卡住了。继承人代码:
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看起来很好,但出于某种原因,第三个,变量'card'是一些古怪的@ss号码。有什么想法吗?
编辑: 这就是我称之为功能的方式。
prompt(boardSpace, cardFromHand, &checkS[9], &checkC[4]);
答案 0 :(得分:0)
该功能(大部分)都很好。最有可能的问题就是如何调用它。特别是,checkS
和/或checkC
可能没有为它们分配足够的内存,当您尝试在
checkC[card] = true;
checkS[space] = true;
P.S。这不太可能与您的问题有任何关系,但
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]);
如果checkS
和checkC
是正确尺寸的数组,则上述内容应该只是:
prompt(boardSpace, cardFromHand, checkS, checkC);
否则你将指针传递给两个数组的 end ,而不是指向开头。