所以我现在的代码是使用模拟堆栈创建一副牌(因为我不知道如何在C++中实现一个真正的堆栈)。洗牌,然后甲板被分成两半,并传递给两名球员,p1
和p2
。然后用户可以看到p1
的卡片,其编号从1到26,用户可以选择1到26之间的一个数字来选择该卡片并将其投入使用。C++在Struct中设置元素Array = NULL
我基本上必须有通过p1
的卡片的代码,看看你选择的卡片是否等于p1
的卡片堆叠中的卡片,如果它们相等,那么我需要将该元素设置为等于为NULL。 唯一的问题是p1
的数组由字符和整数组成,因为它是一个结构数组。否则,将东西设置为NULL不会成为问题。
后,我拿到您选择等于NULL特定的元素,然后我要推所有的元素是空元素之后,一个空格前进,所以像
p1[x] = p1[x+1];
这里是开始我的代码,其中的结构是何主要是:
struct Card{
char suit[10];
int number;
};
void playGame(Card p1[], Card p2[]);
void fillDeck(Card *deck);
void fillPlayerDeck(Card deck[], Card p1[], Card p2[]);
void printDeck(Card deck[], Card p1[], Card p2[]);
void shuffleDeck(Card *deck);
void throwCard(Card p1[], Card p2[], Card p1cardsThrown[], Card p2cardsThrown[]);
//string toString(Card p1[], Card p2[], Card p1New[], Card p2New[]);
int main (int argc, char *argv[]){
Card deck[52];
Card p1[26];
Card p2[26];
//Card p1New[26];
//Card p2New[26];
Card p1cardsThrown[26];
Card p2cardsThrown[26];
fillDeck(deck);
shuffleDeck(deck);
fillPlayerDeck(deck, p1, p2);
printDeck(deck, p1, p2);
throwCard(p1, p2, p1cardsThrown, p2cardsThrown);
//playGame(p1, p2, p1cardsThrown, p2cardsThrown);
}
而现在的问题是代码,我throwCard功能:
void throwCard(Card p1[], Card p2[], Card p1cardsThrown[], Card p2cardsThrown[]){
printf("\nWhich of your cards would you like to play?\n");
int i = 0;
for(i; i < 26; i++){
printf("%d: %d of %s\n", i, p1[i].number, p1[i].suit);
}
int cardNumber;
cin >> cardNumber;
printf("You chose %d: the %d of %s!", cardNumber, p1[cardNumber].number, p1[cardNumber].suit);
//HERE IS WHERE THE PROBLEM IS ACTUALLY HAPPENING
//check which card was thrown, then move that card out of array
for(int x = 0; x<26; x++){
if(p1[cardNumber].number = p1[x].number){
if(p1[cardNumber].suit = p1[x].suit){
p1[cardNumber].number = NULL;
p1[cardNumber].suit = NULL;
for(int y = x; y < 26; y++){
if(p1[y].number = NULL){
if(p1[y].suit = NULL){
p1[y] = p1[y + 1];
printf("This is P1's new deck");
printf("%d: %d of %s\n", x, p1[x].number, p1[x].suit);
}
}
}
}
}
}
}
这里是我收到确切的错误:
EgyptianRatScrew3.cpp: In function 'void throwCard(Card*, Card*, Card*, Card*)':
EgyptianRatScrew3.cpp:54:33: error: invalid array assignment
if(p1[cardNumber].suit = p1[x].suit){
^
EgyptianRatScrew3.cpp:55:35: warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]
p1[cardNumber].number = NULL;
^
EgyptianRatScrew3.cpp:56:33: error: incompatible types in assignment of 'long long int' to 'char [10]'
p1[cardNumber].suit = NULL;
^
EgyptianRatScrew3.cpp:58:32: warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]
if(p1[y].number = NULL){
^
EgyptianRatScrew3.cpp:59:33: error: incompatible types in assignment of 'long long int' to 'char [10]'
if(p1[y].suit = NULL){
^
对于一个你正在做的任务,如果你应该做一个比较 – dwcanillas
你试图分配NULL时,你应该只分配'0'。 “NULL”用于指针,“0”用于数值。如果你声明了一个变量'int i = 0',但是'int * i = NULL'。 另外,如果你需要一个现成的堆栈实现,你可以使用'std :: stack'来使用C++。 http://www.cplusplus.com/reference/stack/stack/ – antipattern
使用像矢量一样的标准容器,一旦你发现卡片从矢量中删除它。 – NathanOliver