Question

Its been a while since I done C++, but I'm trying to split this program into three files. (Driver.cpp, Powerball.cpp and Powerball.h) and I think everything is in the right place. With the current version, I'm getting the following error messages while I'm running it. Any help or pointers is helpful! Thanks!

Errors

Driver.cpp (56): error C2660: 'game' : function does not take 1 arguments

(58): error C2360: initialization of 'gameType' is skipped by 'case' label

(55) : see declaration of 'gameType'

(61): error C2361: initialization of 'gameType' is skipped by 'default' label

(55) : see declaration of 'gameType'

Driver.cpp

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <cstdlib>
#include <conio.h>
#include <ctime>

using namespace std;

int main()
{
void header();
int menu();
void game();

cout.setf(std::ios::fixed);  // Remove counter's E notation
cout.precision(0);   // Don't display decimal

bool gameType = false;
// true - jackpot game
// false - standard game

while (true)
{

    switch (menu()) // Display menu & get users selection
    {
    case 1:  // Show instructions
        cout << "You will be asked to pick a total of 6 numbers.\n"
            << "The first five numbers must be a value between 1 and 55.\n"
            << "The last number, the powerball, must be\n"
            << "between 1 and 42, and may repeat a previously picked value.\n"
            << "All picks must be whole number values.\n\n"
            << "There are 9 possible winning combinations:\n"
            << "5 matches + powerball  $23,000,000  Odds 1 in 175,223,510\n"
            << "5 matches              $1,000,000   Odds 1 in 153,632.65\n"
            << "4 matches + powerball  $10,000      Odds 1 in 648,975.96\n"
            << "4 matches              $100         Odds 1 in 19,078.53\n"
            << "3 matches + powerball  $100         Odds 1 in 12,244.83\n"
            << "3 matches              $7           Odds 1 in 360.14\n"
            << "2 matches + powerball  $7           Odds 1 in 706.43\n"
            << "1 match + powerball    $4           Odds 1 in 110.81\n"
            << "Powerball only         $4           Odds 1 in 55.41\n\n"
            << "Press any key to return to the main menu\n\n";
        _getch();
        break;
    case 2:  // Game
        bool gameType = false;
        game(gameType);
        break;
    case 3:  // Exit
        return 0;
        break;
    default:    // Invalid choice
        cout << "Invalid menu choice.\n\n";
        break;
    }
}




}

Powerball.h

void header();
int menu();
/* Main menu function
** Outputs menu options and returns the player's choice
** 1 = show instructions
** 2 = play standard game
** 3 = exit
*/

void game(const bool& type);
/* Main game function
** boolean argument determines the type of game
*/

short* makePicks(const short& size);
/* Prompts the user to input their choices
** checks that those choices are valid, then
** returns a pointer to the array of picks
*/

short* makePicksRand(const short& size);
/* Selects random numbers, checks them for validity
** then returns pointer to the array
*/

bool validate(const short& num, const short* picks);
/* Checks the passed array for validity.
** see instructions for the criteria to determine
** if a number is valid
*/

bool checkWin(const short* player, const short* random, const bool& type);
/* Checks the users selections against the random selections
** if standard gametype, returns true whenever a match is found
** if jackpot gametype, returns true *only* when all numbers match
*/

Powerball.cpp

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <cstdlib>
#include <conio.h>
#include <ctime>
#include "Powerball.h"

using namespace std;

const short LOTTO_SIZE = 6;  // Size of arrays for tracking picks

// Used to store the text output shown when the player wins
const char* const winTxt[] = { 
"Winner! - Jackpot! $23,000,000",    // 5 + powerball
"Winner! - $1,000,000!!",    // 5 white balls
"Winner! - $10,000!!",       // 4 white balls + Powerball
"Winner! - $100!",           // 4 or 3 white balls + Powerball
"Winner! - $7!",             // 3 or 2 white balls  + Powerball
"Winner! - $4!",             // 1 white ball + Powerball
"Winner! - $4!" };           // Powerball

struct pbSet
{
    float alone;
    float match1;
    float match2;
    float match3;
    float match4;
    float match5;
};

// Used to keep tally of wins if playing until jackpot
struct winCount
{
    pbSet powerball;
    float match3;
    float match4;
    float match5;
} winnings = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // Counter to track the winnings


void header()
{
    cout << "Sean Kilbane C++ II"
         << "\nPowerball: Program 1";
}

int menu()
{
    short temp = 0;
    cout << endl
        << "1. View instructions\n"
        << "2. Play standard game\n"
        << "3. Exit\n";
    cin >> temp;
    cout << endl;
    if (!cin)
    {
        cin.clear();
        cin.ignore();
        return 0;
    }
    else
        return temp;
}

void game(const bool& type)
{
    short *playerPicks,  // numbers chosen by the player
        *randPicks;  // random numbers (winning picks)
    float counter = 1.0f;    // counter of number of tries
    bool win = false;    // tracks win condition
    playerPicks = makePicks(LOTTO_SIZE);
    cout << endl
        << "You've chosen: ";
    for (short i = 0; i < LOTTO_SIZE; i++)
        cout << playerPicks[i] << " ";
    cout << endl
        << "Press any key to begin playing.\n";
    _getch();
    {
        while (!win)
        {
            randPicks = makePicksRand(LOTTO_SIZE);
            cout << "Try " << counter << ": ";
            for (short i = 0; i < LOTTO_SIZE; i++)
                cout << randPicks[i] << " ";
            cout << endl;
            win = checkWin(playerPicks, randPicks, type);
            counter++;
            delete[] randPicks;
        }
    }   // end section to be timed, timer ends via destructor
    cout << endl;
    if (type)
        cout << "Before you hit the Jackpot, you also collected the following wins:\n"
        << "Powerball only - " << winnings.powerball.alone << endl
        << "Powerball + 1 match - " << winnings.powerball.match1 << endl
        << "Powerball + 2 matches - " << winnings.powerball.match2 << endl
        << "3 matches - " << winnings.match3 << endl
        << "Powerball + 3 matches - " << winnings.powerball.match3 << endl
        << "4 matches - " << winnings.match4 << endl
        << "Powerball + 4 matches - " << winnings.powerball.match4 << endl
        << "5 matches - " << winnings.match5 << endl
        << endl;
    cout << "Press any key to return to the main menu.\n";
    _getch();
    delete[] playerPicks;
}

short* makePicks(const short& size)
{
    short *temp = new short[size];
    bool repeat = false;
    cout << "Pick your first 5 numbers. Choices must be from 1-55, and may not repeat\n";
    for (short i = 0; i < LOTTO_SIZE;) // increment counter manually, later
    {
        if ((i == 5) && (!repeat))
        {
            cout << "Now, pick your powerball number. Choice must be from 1-42, and may\n"
                << "repeat any previous pick.\n";
            repeat = true;
        }
        cout << "Pick " << (i + 1) << ": ";
        cin >> temp[i];
        if (!cin)
        {
            cin.clear();
            cin.ignore();
            cout << "Invalid input.\n";
        }
        else
        {
            if (validate(i, temp))
                i++;
            else
                cout << "Pick " << (i + 1) << " conflicts with a previous choice or is invalid.\n";
        }
    }
    return temp;
}

short* makePicksRand(const short& size)
{
    short *temp = new short[size];
    for (short i = 0; i < LOTTO_SIZE;)   // will increment counter manually
    {
        if (i == 5)
            temp[i] = (rand() % 42) + 1;
        else
            temp[i] = (rand() % 55) + 1;
        if (validate(i, temp))
            i++;
    }
    return temp;
}

bool validate(const short& num, const short* picks)
{
    if (num == 5)   // when checking the last number (powerball)
    {
        if ((picks[num] < 1) || (picks[num] > 42))
            return false;
        else
            return true;
    }
    else     // checks all other numbers
    {
        if ((picks[num] > 55) || (picks[num] < 1))
            return false;
        else if (num > 0)
        for (short i = 0; i <= num; i++)
        if (picks[i] == picks[i + 1])
            return false;
        return true;
    }
}

bool checkWin(const short* player, const short* random, const bool& type)
{
    bool pbMatch = false;
    short matches = 0;
    for (short i = 0; i < LOTTO_SIZE; i++)
    {
        if (player[i] == random[i])
        {
            if (i == 5)
                pbMatch = true;
            else
                matches++;
        }
    }
    if (pbMatch)
        switch (matches)
    {
        case 0:  // 4
            cout << winTxt[6] << endl;
            if (type)
            {
                winnings.powerball.alone++;
                return false;
            }
            else
                return true;
            break;
        case 1:  // 4
            cout << winTxt[5] << endl;
            if (type)
            {
                winnings.powerball.match1++;
                return false;
            }
            else
                return true;
            break;
        case 2:  // 7
            cout << winTxt[4] << endl;
            if (type)
            {
                winnings.powerball.match2++;
                return false;
            }
            else
                return true;
            break;
        case 3:  // 100
            cout << winTxt[3] << endl;
            if (type)
            {
                winnings.powerball.match3++;
                return false;
            }
            else
                return true;
            break;
        case 4:  // 10k
            cout << winTxt[2] << endl;
            if (type)
            {
                winnings.powerball.match4++;
                return false;
            }
            else
                return true;
            break;
        case 5:  // jackpot
            cout << winTxt[0] << endl;
            return true;
    }
    else
        switch (matches)
    {
        case 3:  // 7
            cout << winTxt[4] << endl;
            if (type)
            {
                winnings.match3++;
                return false;
            }
            else
                return true;
            break;
        case 4:  // 100
            cout << winTxt[3] << endl;
            if (type)
            {
                winnings.match4++;
                return false;
            }
            else
                return true;
            break;
        case 5:  // 200k
            cout << winTxt[1] << endl;
            if (type)
            {
                winnings.match5++;
                return false;
            }
            else
                return true;
            break;
    }
    return false;
}
Was it helpful?

Solution

The problem is with following: In main function, function declaration should be

void game(const bool& type); instead of 
void game();

and enclose the brace for case 2:

case 2:  // Game
        {
        bool gameType = false;
        game(gameType);
        }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top