2017-10-28 7 views
1

なぜチェックが重複した結果のチェックでは動作しません(ポインタ)

int main() 
    { srand(time(NULL)); 
     Card c; 
     Card *Pc; 
     Pc = new Card [52]; 
     Card ** someHands; 
//  typedef Card * Hand; 
//  Hand *someHands; 
     CardtoArray(c,Pc); 
     printDeckofCards(Pc,c); 

    } 

Card GenerateCards(Card c) 
    { 
     int CardNum; 
     CardNum=rand() % 13 + 1; 
     int colour =rand() % 4 + 1; 

     switch(CardNum) 
      { 
       case 1: c.rank= Ace;       
       break; 

       case 2: c.rank= Two; 
       break; 

       case 3: c.rank= Three; 
       break; 

       case 4: c.rank= Four; 
       break; 

       case 5: c.rank= Five; 
       break; 

       case 6: c.rank= Six; 
       break; 

       case 7: c.rank= Seven; 
       break; 

       case 8: c.rank= Eight; 
       break; 

       case 9: c.rank= Nine; 
       break; 

       case 10: c.rank= Ten; 
       break; 

       case 11: c.rank= Jack; 
       break; 

       case 12: c.rank= Queen; 
       break; 

       case 13: c.rank= King; 
       break; 
      } 
     switch(colour) 
      { 
       case 1:c.color="Diamond"; 
       break; 
       case 2:c.color="Club"; 
       break; 
       case 3:c.color="Heart"; 
       break; 
       case 4:c.color="Spade"; 
       break; 
      }   
      return c; 

    } 

//この関数は//が 無効printCard(カードC) をprintsdeckofcards機能を呼び出すことがある一枚のカードを印刷します{

 cout<<*c.color; 

     if(c.rank==Ace) 
     cout<<"A"; 
     else if(c.rank==Two) 
     cout<<"2"; 
     else if(c.rank==Three) 
     cout<<"3"; 
     else if(c.rank==Four) 
     cout<<"4"; 
     else if(c.rank==Five) 
     cout<<"5"; 
     else if(c.rank==Six) 
     cout<<"6"; 
     else if(c.rank==Seven) 
     cout<<"7"; 
     else if(c.rank==Eight) 
     cout<<"8"; 
     else if(c.rank==Nine) 
     cout<<"9"; 
     else if(c.rank==Ten) 
     cout<<"10"; 
     else if(c.rank==Jack) 
     cout<<"J"; 
     else if(c.rank==Queen) 
     cout<<"Q"; 
     else if(c.rank==King) 
     cout<<"K"; 
    } 

//生成し、それはまた //重複カードが生成されているかどうかをチェックする機能samecardを呼び出し、//は、アレイ01に挿入する前に、新しいものを再生しそうであれば52枚のカードを挿入します無効CardtoArray(カード& C、カード* PC) {

 Card *origin; 
     origin=Pc; 
     for(int i=0;i<52;i++) 
     { 
      c=GenerateCards(c); 
      if(SameCard(c,origin)==false) 
      { 
       *Pc=c; 
       Pc++; 
      } 
      else 
       i--;  
     } 
    } 




void printDeckofCards(Card *Pc,Card c) 
    { 
     for(int i=0;i<52;i++) 
     { 
      printCard(*Pc); 
      cout<<" "; 
      Pc++;  
     }    
    } 

bool SameCard(Card c,Card *Pc) 
    { bool check; 

     for(int i=0; i<52; i++) 
     { 
      if(Pc->color==c.color && Pc->rank==c.rank) 
      { 
       check = true; 
      } 
      else 
      { 
       check = false; 
      } 
      Pc++; 
     } 
     return check; 
    } 

BLOCKQUOTE

+0

、どこで、何かが「機能しない」のでしょうか? –

+0

私のチェック機能が、ポインタ配列に挿入する前に自分のカードが重複していないかどうかをチェックすることはできません –

+1

[小さなプログラムをデバッグする方法](https://ericlippert.com/2014/) 03/05/how-to-debug-small-programs /) – alk

答えて

0

あなたはすべてのカードをチェックしているので、自分のブールがループする前にfalseに設定する必要があり、設定されていますループ内で真になります。それは、ループ内で再びfalseに設定するべきではありません。

bool SameCard(Card c,Card *Pc) 
    { bool check= false; 

     for(int i=0; i<52; i++) 
     { 
      if(Pc->color==c.color && Pc->rank==c.rank) 
      { 
       check = true; 
      } 
      //else 
      ///{ 
      // check = false; 
      //} 
      Pc++; 
     } 
     return check; 
    } 

かさえ:

bool SameCard(Card c,Card *Pc) 
{ 
    for(int i=0; i<52; i++, pc++) 
     if(Pc->color==c.color && Pc->rank==c.rank) 
      return true; 
    return false; 
} 
+0

OMG cantは、このおかげで4日間過ごしたと信じています。 –

関連する問題