上周在我的计算机科学课上,我们编写了一个程序,其中包含一个从文件中导入“卡片”的函数,如下所示:
struct card
{
char rank[10];
char suit[10];
char color;
bool dealt;
char location[12];
};
void importCard(card deck[])
{
ifstream fin;
fin.open("deck.txt");
int index;
for(index=0;index<52;index++)
{
fin >> deck[index].rank;
fin >> deck[index].suit;
if(deck[index].suit[0]==('d')||deck[index].suit[0]==('h'))
{
deck[index].color='r';
}
else
{
deck[index].color='b';
}
deck[index].dealt=false;
}
}
基本上,我很高兴在这个函数中使用点运算符。
现在,我的任务是修改它以使用指针代替所有方括号。但是,如果我使用
之类的东西,它就不起作用fin >> *deckPointer.suit;
因为指针不适用于点运算符。那么,我如何写这个循环遍历所有卡?我知道如何将它写入循环通过一张卡,但我不知道如何让它循环通过所有卡。此外,我不能使用任何其他更高级的工具,如矢量,所以不建议。此外,我只允许用++和 - 增加我的指针,而不是任何其他数量。
答案 0 :(得分:3)
使用点运算符指针工作,它们的优先级是错误的。您可以使用一些括号来修复它:
fin >> (*deckPointer).suit;
在c++
语法:->
运算符中有一个方便的简写,结合了指针取消引用和字段访问:
find >> deckPointer->suit;
答案 1 :(得分:1)
这里有一个暗示:
card* temp = &deck[index];
与
相同card *temp = deck;
temp += index;
然后您可以使用->
来获取指向的值。由于这是家庭作业,我不想更进一步。