How To Calculate The Sum Of 2 Sets Created By Two Group Datas From A Random Number Generator?
I am trying to make a programming assignment in my school that requires me to create a dice game in C where the winner is determined based on which sum of 10 dice rolls (between the computer and the player) is higher. However I seem to have encountered a problem where my program would add the sum of the computer dice rolls to that of the user causing a guaranteed win to the user. The program must make use of the srand and rand function and I currently have no idea how to fix this due to this being my entry into programming. Below is the code I have made as I do not how to properly explain this and I have no clue the error could be. Thank you very much for any possible help as I cannot contact my professor at the moment
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
//Computer Dice Roll
Comp_Dice(int CP_Value, int CP_Sum){
srand(time(0));
for(int i = 0; i <10; i++){
CP_Value = rand()%6+1;
printf("%d ", CP_Value);
CP_Sum += CP_Value;
}
printf("\nPlayer 1 Total: %d", CP_Sum);
}
//End of Computer Dice Roll
//Player Data
Plyr_Dice(int Plyr_Value, int Plyr_Sum, int x){
srand(x);
for(int e = 0; e <10; e++){
Plyr_Value = rand()%6+1;
printf("%d ", Plyr_Value);
Plyr_Sum +=Plyr_Value;
}
printf("\nPlayer 2 Total: %d", Plyr_Sum);
}
//End of Player Data
int main(){
int x, CP_Value, CP_Sum, Plyr_Value, Plyr_Sum, sel;
system("cls");
do{
system("cls");
printf("\n\t\tDice Roll Game");
printf("\n\t1.Play");
printf("\n\t2.Exit");
printf("\nSelect>>: ");
fflush(stdin);
scanf("%d" ,&sel);
printf("\n\n\n");
switch(sel){
case 1: printf("Computer dice generated: ");
Comp_Dice(CP_Value, CP_Sum);
printf("\nPlayer dice has been generated please Input integer seed: ");
scanf("%d", &x);
Plyr_Dice(Plyr_Value, Plyr_Sum, x);
if (Plyr_Sum>CP_Sum){
printf("\nPlayer 2 Wins!\n");
}else printf("\nPlayer 1 Wins!\n");
break;
case 2: printf("Thank you for playing");
break;
default: printf("invalid input please choose 1 or 2\n");
}
system("pause");
}while(sel!=2);
return 0;
}
Answer
If you address the things the compiler hints at when warnings are turned on, your code will be closer to running correctly.
Here is the list my compiler shows:
Build Status (prog.prj - Debug)
main29.c - 6 warnings
16, 1 warning: function does not return a value
29, 1 warning: function does not return a value
49, 27 warning: variable 'CP_Value' may be uninitialized when used here
33, 20 note: initialize the variable 'CP_Value' to silence this warning
49, 37 warning: variable 'CP_Sum' may be uninitialized when used here
33, 28 note: initialize the variable 'CP_Sum' to silence this warning
54, 27 warning: variable 'Plyr_Value' may be uninitialized when used here
33, 40 note: initialize the variable 'Plyr_Value' to silence this warning
54, 39 warning: variable 'Plyr_Sum' may be uninitialized when used here
33, 50 note: initialize the variable 'Plyr_Sum' to silence this warning
Link play.exe
"c:\play\prog.exe" successfully created.
Build succeeded.
Some other suggestions:
As per C standard, it is undefined behavior to use fflush(stdin).
Place srand()
in the beginning of main(){
, and call only once during execution. More on proper use of srand()
here` here
To change the value of a variable passed as an argument in any function, it is not the variable itself that is passed, it is the address of that variable.
Change the prototype of Comp_Dice
to:
Comp_Dice(int CP_Value, int *CP_Sum){
Then call it as shown:
Comp_Dice(CP_Value, &CP_Sum);//& is the `address of` operator
Change prototype of Plyr_Dice
to:
void Plyr_Dice(int Plyr_Value, int Plyr_Sum, int x);
^^^^
Same with Plyr_Dice
In your first call to Comp_Dice
, CP_Value
is not initialized. True for several other variables as well. Plyr_Value
, Plyr_Sum
,... Initialize all of them, even if you believe they will be assigned values in first use. Its is just good practice to initialize.
EDIT to address specific questions in comments on code.
Following is your code modified to run. I have commented out a few things that do not work on my system, and things that I have identified are wrong. It may need some debugging, but it should run.
//Computer Dice Roll
void Comp_Dice(int CP_Value, int *CP_Sum){
srand(time(0));
for(int i = 0; i <10; i++){
CP_Value = rand()%6+1;
printf("%d ", CP_Value);
*CP_Sum += CP_Value;
}
printf("\nPlayer 1 Total: %d", *CP_Sum);
}
//End of Computer Dice Roll
//Player Data
void Plyr_Dice(int Plyr_Value, int *Plyr_Sum, int x){
srand(x);
for(int e = 0; e <10; e++){
Plyr_Value = rand()%6+1;
printf("%d ", Plyr_Value);
*Plyr_Sum +=Plyr_Value;
}
printf("\nPlayer 2 Total: %d", *Plyr_Sum);
}
//End of Player Data
int main(void){
int x, CP_Value=0, CP_Sum, Plyr_Value=0, Plyr_Sum, sel;
//system("cls");//okay, but does not work on my system.
do{
//system("cls");
printf("\n\t\tDice Roll Game");
printf("\n\t1.Play");
printf("\n\t2.Exit");
printf("\nSelect>>: ");
//fflush(stdin);// undefined behavior
scanf("%d" ,&sel);
printf("\n\n\n");
switch(sel){
case 1: printf("Computer dice generated: ");
Comp_Dice(CP_Value, &CP_Sum);
printf("\nPlayer dice has been generated please Input integer seed: ");
scanf("%d", &x);
Plyr_Dice(Plyr_Value, &Plyr_Sum, x);
if (Plyr_Sum>CP_Sum){
printf("\nPlayer 2 Wins!\n");
}else printf("\nPlayer 1 Wins!\n");
break;
case 2: printf("Thank you for playing");
break;
default: printf("invalid input please choose 1 or 2\n");
}
//system("pause");//okay, but does not work on my system.
}while(sel!=2);
return 0;
}
Related Questions
- → OctoberCMS Backend Loging Hash Error
- → "failed to open stream" error when executing "migrate:make"
- → OctoberCMS - How to make collapsible list default to active only on non-mobile
- → Create plugin that makes objects from model in back-end
- → October CMS Plugin Routes.php not registering
- → OctoberCMS Migrate Table
- → How to install console for plugin development in October CMS
- → OctoberCMS Rain User plugin not working or redirecting
- → October CMS Custom Mail Layout
- → October CMS - How to correctly route
- → October CMS create a multi select Form field
- → How to update data attribute on Ajax complete
- → October CMS - Conditionally Load a Different Page