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;

ポインターはドット演算子では機能しないためです。では、すべてのカードをループするには、これをどのように記述すればよいでしょうか? 1 枚のカードをループするように記述する方法は知っていますが、すべてのカードをループする方法はわかりません。また、ベクターなどの他の高度なツールは使用できないため、お勧めしません。また、ポインターを ++ と -- でインクリメントすることだけが許可されており、他の量ではインクリメントできません。

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 に答える