所以我現在的代碼是使用模擬堆棧創建一副牌(因爲我不知道如何在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