The sum of the elements in the array returns an invalid value

I am trying to encode a blackjack game. Until the last part, everything went well. My code is as follows:

#include <iostream> #include <cstdlib> #include <ctime> #include <algorithm> using namespace std; //Declarations void makedeck(int deck[]); int getTopCard(int deck[]); void addCardToHand(int hand[], int drewCard); void firstHand(int pHand[], int dHand[], int deck[]); void printHands(int pHand[], int dHand[]); void showCard(int card); int getHandValue(int hand[]); int main() { int pHand[10]= {0}; //Player Hand int dHand[10]= {0}; //Dealer Hand int deck[52]; //Deck makedeck(deck); //Generating an ordered deck random_shuffle(&deck[0],&deck[52]); //Shuffling the deck firstHand(pHand,dHand,deck); //Dealing first hands. printHands(pHand,dHand); // Printing hands return 0; } /*Purpose of this function is to create 4 different suits with 14 different cards in all of them, a complete deck*/ void makedeck(int deck[]) { int a=0; for(int x=101; x<114; x++) { deck[a]=x; a++; } for(int x=201; x<214; x++) { deck[a]=x; a++; } for(int x=301; x<314; x++) { deck[a]=x; a++; } for(int x=401; x<414; x++) { deck[a]=x; a++; } } /*This function returns a topcard integer as value, that is the card at top of deck, then nullifies it from deck to prevent it from being drawn again.*/ int getTopCard(int deck[]) { int topcard; for(int x=0; x<52; x++) { if(deck[x]!=0) { topcard=deck[x]; deck[x]=0; break; } } return topcard; } /*This function draws four cards from top of deck and deals them respectively to the order of rules*/ void firstHand(int pHand[], int dHand[], int deck[] ) { addCardToHand(pHand , getTopCard(deck) ); addCardToHand(dHand , getTopCard(deck) ); addCardToHand(pHand , getTopCard(deck) ); addCardToHand(dHand , getTopCard(deck) ); } /*This function is for further Hit actions. Adds the drawnCard to the desired hand. The value of drawnCard is returned from the getTopCard() function*/ void addCardToHand(int hand[], int drawnCard) { for(int x=0; x<=10; x++) { if(hand[x]!=0) { continue; } if(hand[x]==0) { hand[x]=drawnCard; break; } } } /*This function determines the values of cards. Since suits that reside in the 100s part are not relevant to the value of the cards and are only required for seperating two cards with same value, in order to remove them from the information that we'll print, we use % on card values*/ void showCard(int card) { if(card==0) cout << " "; else switch(card%100) { case 1: cout << "A "; break; case 11: cout << "J "; break; case 12: cout << "Q "; break; case 13: cout << "K "; break; default: cout << card%100 << " "; } } /*Prints both hands*/ void printHands(int pHand[],int dHand[]) { cout << "Dealer hand: "; for(int y=0; y<10; y++) { showCard(dHand[y]); } cout << getHandValue(dHand) << endl; cout << endl << "Player hand: "; for(int x=0; x<10; x++) { showCard(pHand[x]); } cout << getHandValue(pHand) << endl; } /*Sums all the values of cards in the hand and returns it as an integer*/ int getHandValue(int hand[]) { int sum=0; for(int x=0; x<10; x++) { if(hand[x]%100==11) sum+=10; if(hand[x]%100==12) sum+=10; if(hand[x]%100==13) sum+=10; else sum+=hand[x]%100; } return sum%100; } 

Now that I have completed it, I get the following:

 Dealer hand: K 3 13 Player hand: 5 Q 27 

The dealer’s hand is correct, however, since 5 + Q should be 15, not 27, something is wrong, which causes incorrect printing, but so far I have not found it. Can anyone help?

+5
source share
2 answers

You used if , where you need else if

  if(hand[x]%100==11) sum+=10; if(hand[x]%100==12) sum+=10; if(hand[x]%100==13) sum+=10; else sum+=hand[x]%100; 

it should be

  if(hand[x]%100==11) sum+=10; else if(hand[x]%100==12) sum+=10; else if(hand[x]%100==13) sum+=10; else sum+=hand[x]%100; 

If you want to process the ace correctly:

 /*Sums all the values of cards in the hand and returns it as an integer*/ int getHandValue(int hand[]) { bool ace=false; int sum=0; for(int x=0; x<10; x++) { if(hand[x]%100==1) ace=true; if(hand[x]%100>=11) sum+=10; else sum+=hand[x]%100; } if ( sum<12 && ace ) sum+=10; return sum; } 
+5
source

In the above code, you used the 3 if with the 1 else , where you wanted to use the "else if" statements (only one of the if is possible for each hand[x] value).

 if(hand[x]%100==11) sum+=10; if(hand[x]%100==12) sum+=10; if(hand[x]%100==13) sum+=10; else sum+=hand[x]%100; 

else if such statements will work:

 if (hand[x]%100==11) sum+=10; else if (hand[x]%100==12) sum+=10; else if (hand[x]%100==13) sum+=10; else sum+=hand[x]%100; 
+4
source

Source: https://habr.com/ru/post/1239212/


All Articles