如何在C语言上修复此错误"subscripted value"?



我从我的程序中得到了这个错误

error: subscripted value is neither array nor pointer nor vector
84 |   }while(deck[row][column] != 0);
|                   ^
poker_comp.c:85:13: error: subscripted value is neither array nor pointer nor vector
85 |    deck[row][column] = card;
|

能帮我纠正这个错误吗?

这是代码

typedef struct card{
int pips;
char suit;
bool flipped;
struct card *next;
}Card;
typedef struct deck{
int size;
Card *top;
//int topcardindex;
}Deck;
typedef struct player{
char* name;
Card *c1, *c2;
int account;
}Player;

#include "poker.h"
/* [ Chapter 9: Structures and Unions ]  
*
*  Functions to create
*  
*  1) newcard(-,-): Use malloc
*
*  2) newdeck(): Use malloc 
*  
*  3) newplayer(): Use malloc
*
*      4) eject(): only can pop out from the top of the Deck 
*          (pop from the bottom is not allowed) 
*
*  5) shuffle(-): use srand/rand
*/
/* function to complete */
Card* newcard(int _pips,char _suit){

/* write codes */   
Card *newCard = malloc(sizeof(Card));
newCard->pips = _pips;
newCard->suit = _suit;

return newCard; 
}

Deck* newdeck(){

/* write codes */
Deck *deck = malloc(sizeof(Deck));

Card* cursor;   
for(char s = 0; s <= 3; s++) {
for(int p = 2; p <= 14; p++) {
if(deck->top == NULL) { 
deck->top = newcard(p,s);
cursor = deck->top;
} else {
cursor->next = newcard(p,s);
cursor = cursor->next;
} deck->size;
}
}
return deck;
}
Player* newplayer(char* _name,int _account){

/* write codes */   
Player *player = malloc(sizeof(Player));
player->name = _name;
player->account = _account; 

return player;
}
Card* eject(Deck* deck) {
Card* temp;
/* write codes */
//for(i = 0; i<deck->size; i++)
//  temp[i]=i;
//deck_card = deck->size;

temp = deck->top;
deck->top=temp->next;
return temp;
}
void shuffle(Deck* deck){

/* write codes */

int row, column, card;

for(card=1; card<=52; card++){
do{
row = rand() %52;
column = rand()%52;
}while(deck[row][column] != 0);
deck[row][column] = card;
}

srand(clock());     

if(deck->size<=20) printf("nnERROR: deck size should be bigger than 20nn");
unsigned char index = rand()%(deck->size-20)+10;
unsigned char endex = rand()%(deck->size - index-1)+1;

Card *cindex, *cendex, *aendex, *bendex;
cendex = deck->top;
for(int i = 0; i < index-1; i++) {
cendex = cendex->next;
}

head->top = deck->top;
head->size = index-1;
cindex = cendex->next;
cendex->next = NULL;
aendex = cendex;
cendex = cindex;

for(int i = 0; i < endex-1; i++) {
cendex = cendex->next;
}

mid->top = cindex;
mid->size = endex-1;
cindex = cendex->next;
cendex->next = NULL;
bendex = cendex;
cendex = cindex;
for(int i =0; i < (deck->size - index - endex-1); i++) {
cendex = cendex->next;
}
cendex->next = NULL;


tail->top = cindex;
tail->size = (deck->size - index - endex);  

deck->top = mid->top;
aendex->next = tail->top;
bendex->next = head->top;
free(head); free(mid); free(tail);      
return;
}
void freedeck(Deck* deck){      
/* write codes */   
return;
}

如果有疑问,请检查数据类型。

  • deck是类型Deck *,指向类型Deckstruct deck的指针。

  • deck[row]为您提供类型为Deckstruct deck的变量。这不是指针类型。

  • 进一步尝试索引到deck[row]是无效语法,因为要应用数组下标运算符[],操作数必须是";指向完整对象类型的指针";。在您的情况下,这违反了规则,因此这是无效语法。

如果必须使用此语法,则deck的类型必须为Deck **

最新更新