I have developed a Lotto Game in C for my Assignment, it allows a user to enter one of the 6 menu options.
From the menu the user would be able to view the numbers they have chosen, another option would sort the numbers in ascending order, in this case I used bubble sort.
What it does in the 1st menu is read the 6 numbers that the user has entered from the keyboard. The number must range from 1-42 and if the user enters any number out of bounds it will give an error message. It also gives an error message if the user enters a number that they has entered already.
Another option will compare the users numbers with the winning numbers and see if they match.
It will also display how many times a number has been entered, for example if the user entered 5 twice from 4 games it will display Number 5 has been selected 2 times. without exiting the program. This can be selected from the menu too.
Last but not least, the last option from the menu exits the program.
I added key features such as displaying the menu after finishing with the current option from the menu and options 2,3,4 and 5 only to be selected if option 1 has been selected from the menu.
Please take a look and let me know how this code could be improved to make this a better Lotto Game.
Here is the code:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 6 // Size of the array as only 6 numbers are entered.
#define MAXOUT 43 // For Frequency use when displaying the numbers.
#define ZERO 0 // Replacing 0 with Zero.
#define ARRAYSIZE 500 // Storing the frequency, 500 should be enough.
/*Prototypes*/
//For Option 1
//
void menu_1(int*, int*);
//For Option 2
//
void menu_2(int*);
//For Option 3
//
void menu_3(int*);
//For Option 4
//
void menu_4(int*, int*);
//For Option 5
//
void menu_5(int*, int*);
//For Option 6
//
void menu_6();
//Ninja fix for entering the number twice.
//
int error_dubhandle(int *user_lottonumber);
//Out of bound error fix
//
void error_handle1();
//Main
//
int main(void)
{
//Main Variables.
//
int start; // Used to select from the menu.
int loop; // To display the menu over and over.
loop = ZERO; // To display the menu over and over in the do while loop.
//User error checking select 1 before selecting other options.
//
int selectOnefirst = 0;
//Where the user numbers are stored.
//
int user_lottonumber[SIZE];
//The winning numbers.
//
int winning_numbers[SIZE] = {1,3,5,7,9,11};
//Frequency array storage
//
int frequencyChecker[ARRAYSIZE] = {ZERO};
//The loop for the main to be displayed over and over
//Until the program ends.
//
do
{
//Printing out the menu. With a nice boarder around it.
//
printf("\n--------------------------------------------Gabriel Grimberg---------------------------------------------------");
printf("\n***************************************************************************************************************");
printf("\n* 1. - Enter your numbers in to play. *");
printf("\n* 2. - Display the numbers you enters. *");
printf("\n* 3. - Sort your numbers in an increasing order. *");
printf("\n* (This is mandatory, it will sort the numbers you entered in an increasing order.) *");
printf("\n* 4. - See if you won the lotto! *");
printf("\n* 5. - Display the frequency of the numbers. (Record of times a number has been selected.) *");
printf("\n* 6. - Exit the Lotto Game. *");
printf("\n***************************************************************************************************************\n\n");
//Letting the user know to press 1 before pressing 2-5.
//
printf("You must complete option 1 from the menu before moving on.");
printf("\n\nPlease select from the menu: ");
//Entering from the menu.
//
scanf("%d", &start);
fpurge(stdin); //Clears the buffer of given stream.
//Making sure the user can only select the options from 1-6 from the menu.
//
if(start > 6)
{
error_handle1();
}
//Calling the function to allow the user to enter the numbers.
//
if(start == 1)
{
menu_1(user_lottonumber,frequencyChecker);
selectOnefirst++;
}
//Calling the function to show the user entered numbers.
//
if(start == 2 && selectOnefirst == 1)
{
menu_2(user_lottonumber);
}
//Calling the function to sort the numbers in an increasing order.
//
if(start == 3 && selectOnefirst == 1)
{
menu_3(user_lottonumber);
}
//Calling the function to see if the user won the lotto.
//
if(start == 4 && selectOnefirst == 1)
{
menu_4(user_lottonumber,winning_numbers);
}
//Calling the function to see the frequency of numbers
//
if(start == 5 && selectOnefirst == 1)
{
menu_5(user_lottonumber, frequencyChecker);
selectOnefirst--;
}
//Calling the function to exit the program.
//
if(start == 6)
{
menu_6();
}
}
while (loop == ZERO); //end loop
}//End Int Main()
/*Implementing Functions*/
//Getting the users numbers
//
void menu_1(int* user_lottonumber, int* frequencyChecker)
{
//Declaring the Variables.
//
int i;
int number_checker;
number_checker = 1;
//Resetting the Array to 0.
//
for(i = ZERO; i < SIZE; i++)
{
*(user_lottonumber + i) = ZERO;
}
//Displaying to the user the information.
//
printf("Welcome to the Lotto Game! Time to pick your numbers.\n");
printf("Note: You must pick from 1-42\n\n"); //Telling the user to pick from 1-42.
for(i = ZERO; i < SIZE; i++)
{
do
{
number_checker = 1;
//Telling the user to enter in their 6 numbers.
//
printf("\nPlease enter your %d numbers in: ",SIZE);
scanf("%d", user_lottonumber + i);
fpurge(stdin); //Clears the buffer of given stream.
//Error checking.
//
if(error_dubhandle(user_lottonumber) || (!(*(user_lottonumber + i) > ZERO && *(user_lottonumber + i) < 43) ))
{
number_checker = ZERO;
printf("\nThe number you have selected is either already selected or invalid.\n");
printf("\nPlease select a number between 1-42 also don't select the same number again.\n");
}
//Calculating the Frequency.
//
if(number_checker == 1)
{
//Checking the numbers entered on against the numbers on the frequencyChecker.
//
*(frequencyChecker + *(user_lottonumber + i)) = *(frequencyChecker + *(user_lottonumber + i)) + 1;
}
}//End do
while(!number_checker); //While not 0 run the code.
}//End for
}//End menu_1()
//Displaying the user entered numbers.
//
void menu_2(int *user_lottonumber)
{
//Declaring the Variables.
//
int i;
printf("Here are the numbers that you have selected: \n");
for(i = ZERO; i < SIZE; i++)
{
printf("%d ",*(user_lottonumber+i));
}
}//End main2()
//Organising the User Lotto numbers.
//
void menu_3(int *user_lottonumber)
{
//Declaring the Variables.
//
int n;
int m;
int place;
//Sorting using Bubble Sort.
//
for(n = ZERO; n < SIZE; n++)
{
for(m = n; m < SIZE; m++)
{
if(*(user_lottonumber+n) > *(user_lottonumber+m)) //Sorting in an ascending order.
{
place = *(user_lottonumber+n);
*(user_lottonumber+n) = *(user_lottonumber+m);
*(user_lottonumber+m) = place;
}//End if.
}//End for.
}//End for.
//Displaying the ordered numbers.
//
printf("Here are your numbers ordered: \n");
for(n = ZERO; n < SIZE; n++)
{
printf("%d ", *(user_lottonumber+n) );
}
}//End main3()
//Seeing if the user won
//
void menu_4(int *user_lottonumber, int *winning_numbers)
{
//Declaring the Variables.
//
int i;
int c;
int compareNum;
int bonusNum;
int bonusCount;
bonusNum = 42; //Setting the bonus number.
bonusCount = ZERO;
compareNum = ZERO;
//The counter that checks if the user matches the winning numbers.
//
for(i = ZERO; i < SIZE; i++)
{
for(c = ZERO; c < SIZE; c++)
{
if(*(user_lottonumber+i) == *(winning_numbers+c))
{
compareNum++; //Incrementing.
}
}
}
//The counter that checks if the user has the bonus number
//
for(i = ZERO; i < SIZE; i++)
{
if(*(user_lottonumber) == bonusNum)
{
bonusCount++; //Incrementing.
}
}
//If 6 numbers match the user wins this.
//
if(compareNum == 6)
{
printf("Congratulations, You have won the Jackpot!");
}
//If 5 numbers and the bonus matches, the user wins this.
//
if(compareNum == 5 && bonusCount == 1)
{
printf("Congratulations, You have won a Car!");
}
//If 5 numbers match the user wins this.
//
if(compareNum == 5)
{
printf("Congratulations, You have won a Holiday!");
}
//If 4 numbers and the bonus matches, the user wins this.
//
if(compareNum == 4 && bonusCount == 1)
{
printf("Congratulations, You have won a Weekend Away!");
}
//If 4 numbers match the user wins this.
//
if(compareNum == 4)
{
printf("Congratulations, You have won a Night Out!");
}
//If 3 numbers and the bonus matches,c the user wins this.
//
if(compareNum == 3 && bonusCount == 1)
{
printf("Congratulations, You have won a Cinema Ticket!");
}
//If the none of the numbers the user entered match, the user doesn't win anything.
//
if(compareNum == ZERO || compareNum == 1 || compareNum == 2 || compareNum == 3)
{
printf("Hard luck, you have not won anything.");
}
}//End menu_4()
//Frequency of numbers.
//
void menu_5(int *user_lottonumber, int *frequencyChecker)
{
//Declaring the Variables.
//
int i;
int j;
int adder;
//Prints the frequency of each element.
//
for(i = ZERO; i < MAXOUT; i++)
{
if(*(frequencyChecker+i) != ZERO)
{
printf("Number %d has been selected %d times.\n", i, *(frequencyChecker+i) );
}
}
}//End menu_5()
//Exiting the program
//
void menu_6()
{
//Displaying an exit message.
//
printf("\nYou have chosen to exit the program. Thanks for playing the Lotto Game!\n");
//Terminating the code.
//
exit(ZERO);
}//End menu_6()
//Error Checking making sure the user doesn't enter the same number in again.
//
int error_dubhandle(int *user_lottonumber)
{
//Declaring the Variables.
//
int adding;
int atk;
for (adding = ZERO; adding < SIZE; adding++)
{
for (atk = adding + 1; atk < SIZE; atk++)
{
//Checks if the array has any duplicates.
//
if (*(user_lottonumber + adding) == *(user_lottonumber + atk) && *(user_lottonumber + atk) != ZERO)
{
return(1); //If there is a duplicate then return 1.
}//End if.
}//End second for.
}//End first for.
return(ZERO); //If there is no duplicate return 0.
}//End error_dubhandle();
//Out of bound error fixer
//
void error_handle1()
{
//Showing the user the problem, in this case if the user doesn't select
//between 1-6 from the menu then this will show up.
//
printf("Invalid Option, please select again and read the instructions carefully!");
printf("\n-->You are now going to be shown the menu again, please select appropriately.<--\n");
}//End error_handle1()