I know ya'll have probably seen this one a thousand times but would appreciate some help. Here's the code:
Header File:
Main File:Code:/* The game of paper, rock, scissors. */ #include <ctype.h> /* for isspace() */ #include <stdio.h> /* for printf(), etc */ #include <stdlib.h> /* for rand() and srand() */ #include <time.h> /* for time() */ enum p_r_s1 {paper, rock, scissors, game, help, instructions, quit}; enum outcome {win, lose, tie, error}; typedef enum p_r_s1 p_r_s1; typedef enum outcome outcome; outcome compare(p_r_s1 player_choice, p_r_s1 machine_choice); void prn_final_status(int win_cnt, int lose_cnt); void prn_game_status(int win_cnt, int lose_cnt, int tie_cnt); void prn_help(void); void prn_instructions(void); void report(outcome result, int *win_cnt_ptr, int *lose_cnt_ptr, int *tie_cnt_ptr); void report(outcome result, char *player_choice, char *machine_choice); p_r_s1 selection_by_machine(void); p_r_s1 selection_by_player(void);
Compare File:Code:#include "p_r_s1.h" int main(void) { int win_cnt = 0, lose_cnt = 0, tie_cnt = 0; outcome result; p_r_s1 player_choice, machine_choice; srand(time(NULL)); /* seed the random number generator*/ prn_instructions(); while ((player_choice = selection_by_player()) != quit) switch (player_choice) { case paper: case rock: case scissors: machine_choice = selection_by_machine(); result = compare(player_choice, machine_choice); report (result, &win_cnt, &lose_cnt, &tie_cnt); break; case game: prn_game_status(win_cnt, lose_cnt, tie_cnt); break; case instructions: prn_instructions(); break; case help: prn_help(); break; default: printf("\nPROGRAMMER ERROR: Cannot get to here!\n\n"); exit(1); } prn_game_status(win_cnt, lose_cnt, tie_cnt); prn_final_status(win_cnt, lose_cnt); return 0; }
Print File:Code:#include "p_r_s1.h" outcome compare(p_r_s1 player_choice, p_r_s1 machine_choice) { outcome result; if (player_choice == machine_choice) return tie; switch (player_choice) { case paper: result = (machine_choice == rock) ? win : lose; break; case rock: result = (machine_choice == scissors) ? win : lose; break; case scissors: result = (machine_choice == paper) ? win : lose; break; default: printf("PROGRAMMING ERROR: Unexpected choice!\n\n"); exit(1); } return result; }
Report File:Code:#include "p_r_s1.h" void prn_final_status(int win_cnt, int lose_cnt) { if (win_cnt > lose_cnt) printf("CONGRATULATIONS - You won!\n\n"); else if (win_cnt == lose_cnt) printf("A DRAW - You tied!\n\n"); else printf("SORRY - You lost!\n\n"); } void prn_game_status(int win_cnt, int lose_cnt, int tie_cnt) { printf("\n%s\n%s%4d\n%s%4d\n%s%4d\n%s%4d\n\n", "GAME STATUS:", " Win: ", win_cnt, " Lose: ", lose_cnt, " Tie: ", tie_cnt, " Total: ", win_cnt + lose_cnt + tie_cnt); } void prn_help(void) { printf("\n%s\n", "The following characters can be used for input:\n" " p for paper\n" " r for rock\n" " s for scissors\n" " g print the game status\n" " h help, print this list\n" " i Reprint the instructions\n" " q quit this game\n"); } void prn_instructions(void) { printf("\n%s\n", "Paper, Rock, Scissors:\n" "\n" "In this game\n" "\n" " p is for \"paper\"\n" " r is for \"rock\"\n" " s is for \"scissors\"\n" "\n" "Both the player and the machine will choose one\n" "of p, r, or s. If the two choices are the same,\n" "then the game is a tie. Otherwise:\n" "\n" " \"paper covers the rock\" (a win for paper)\n" " \"rock crushes the scissors\" (a win for rock)\n" " \"scissors cut through paper\" (a win for scissors)\n" "\n" "There are other allowable inputs:\n" "\n" " g for game status (print number of wins)\n" " h for help (print short instructions)\n" " i for instructions (print these instructions)\n" " q for quit (quit the game)\n" "\n" "This game is played repeatedly until q is entered.\n" "\n" "Good Luck!\n"); }
Select File:Code:#include "p_r_s1.h" void report(outcome result, int *win_cnt_ptr, int *lose_cnt_ptr, int *tie_cnt_ptr, p_r_s1 player_choice, p_r_s1 machine_choice) { switch (result) { case win: ++*win_cnt_ptr; if (player_choice == paper) printf("%27sYou chose paper I chose rock. You win.\n", ""); else if (player_choice == rock) printf("%27sYou chose rock I chose scissors. You win.\n", ""); else if (player_choice == scissors) printf("%27sYou chose scissors I chose paper. You win.\n", ""); break; case lose: ++*lose_cnt_ptr; if (player_choice == paper) printf("%27sYou chose paper I chose scissors. You lose.\n", ""); else if (player_choice == rock) printf("%27sYou chose rock I chose paper. You lose.\n", ""); else if (player_choice == scissors) printf("%27sYou chose scissors I chose rock. You lose.\n", ""); break; case tie: ++*tie_cnt_ptr; if (player_choice == paper) printf("%27sYou chose paper I chose paper. We tie.\n", ""); else if (player_choice == rock) printf("%27sYou chose rock I chose rock. We tie.\n", ""); else if (player_choice == scissors) printf("%27sYou chose scissors I chose scissors. We tie.\n", ""); break; default: printf("PROGRAMMER ERROR: Unexpected result!\n\n"); exit(1); } }
I keep getting the following errors:Code:#include "p_r_s1.h" p_r_s1 selection_by_machine(void) { return ((p_r_s1) (rand() % 3)); } p_r_s1 selection_by_player(void) { char c; p_r_s1 player_choice; printf("Input p, r, or s: "); scanf(" %c", &c); switch (c) { case 'p': player_choice = paper; break; case 'r': player_choice = rock; break; case 's': player_choice = scissors; break; case 'g': player_choice = game; break; case 'i': player_choice = instructions; break; case 'q': player_choice = quit; break; default: player_choice = help; break; } return player_choice; }
main.cpp(9) : warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
Linking...
main.obj : error LNK2019: unresolved external symbol "void __cdecl report(enum outcome,int *,int *,int *)" (?report@@YAXW4outcome@@PAH11@Z) referenced in function _main
Debug/p_r_s1.exe : fatal error LNK1120: 1 unresolved externals
I'm told that the function prototype and definition don't match number of items and correct types in the header and main files but I can't see where, my eyes hurt looking for it
Thanks



LinkBack URL
About LinkBacks



