0

上周在我的计算机科学课上,我们编写了一个程序,其中包含一个从文件中导入“卡片”的函数,如下所示:

  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;

因为指针不适用于点运算符。那么,我该如何写这个来循环所有的卡片呢?我知道如何编写它来循环遍历一张卡片,但我不知道如何让它循环遍历所有卡片。另外,我不能使用任何其他更高级的工具,比如向量,所以不要建议这样做。此外,我只能使用 ++ 和 -- 来增加我的指针,而不是任何其他数量。

4

2 回答 2

3

指针点运算符一起使用,它们的优先级是错误的。您可以添加一些括号来修复它:

 fin >> (*deckPointer).suit;

c++语法中有一个方便的简写:->运算符,结合了指针取消引用和字段访问:

find >> deckPointer->suit;
于 2013-02-14T19:12:46.640 回答
1

这里给你一个提示:

card* temp = &deck[index];

是相同的

card *temp = deck;
temp += index;

然后您可以使用->来获取指向的值。由于这是家庭作业,我不想走得太远。

于 2013-02-14T19:15:48.453 回答