I was told to clean up the code and make it easier to understand but all the teacher did was confused me. Any tips? thanks.
These are the steps he asked me to take:
-Change variable and function names to camelCase and remove underscores __
-Make all variable names reflect their purpose (no i's, n's, etc.).
-Remove all global variables and Magic Numbers.
-Change the character arrays to be either arrays or vectors of strings.
-Remove the need for a break statement.
-Validate the number of cards entered by the user to draw from the deck is between 1 and 52.
-Program should ask the user to whether to repeat and not base the decision on invalid input for the number of cards.
-Clearly comment all functions and algorithms.
-Format and indent the code so that the layout reflects the flow.
-Any additional changes to make the code safer and more secure.
-Any additional change to make the code less likely to have bugs and easier to maintain.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
int rand_0toN1(int n);
void draw_a_card();
int select_next_available(int n);
bool card_drawn[52];
int cards_remaining = 52;
char *suits[4] =
{"hearts", "diamonds", "spades", "clubs"};
char *ranks[13] =
{"ace", "two", "three", "four", "five",
"six", "seven", "eight", "nine",
"ten", "jack", "queen", "king" };
int main()
{
int n, i;
srand(time(NULL));
while (1)
{
cout << "Enter no. of cards to draw ";
cout << "(0 to exit): ";
cin >> n;
if (n == 0)
break;
for (i = 1; i <= n; i++)
draw_a_card();
}
return 0;
}
void draw_a_card()
{
int r, s;
int n, card;
n = rand_0toN1(cards_remaining--);
card = select_next_available(n);
r = card % 13;
s = card / 13;
cout << ranks[r] << " of " << suits[s] << endl;
}
int select_next_available(int n)
{
int i = 0;
while (card_drawn[i])
i++;
while (n-- > 0)
{
i++;
while (card_drawn[i])
i++;
}
card_drawn[i] = true;
return i; }
int rand_0toN1(int n) {
return rand() % n; }
|