From 6ad0f0d0b8fd81e2a4d3743e48ef97cb39e05ffa Mon Sep 17 00:00:00 2001 From: Daniel Eisele Date: Thu, 24 Aug 2017 00:50:41 +0200 Subject: [PATCH] Detect if the input file cannot be opened --- hangman.c | 19 +++++++++++++------ hangman.h | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/hangman.c b/hangman.c index eb50a68..8009e5b 100644 --- a/hangman.c +++ b/hangman.c @@ -135,14 +135,13 @@ void initGuessWord(game_state *gs, char *filename) { int i; mvprintw(0, 1, "Please enter your word: "); if (strlen(gs->guessWord) == 0) { /* Word can be set by arguments */ - if (strlen(filename) == 0) { + /* If a file argument was specified then try to read a random line from the file, + if this is not successful or if there is no file argument use the manual input. */ + if (strlen(filename) == 0 || readRandomLine(filename, gs->guessWord) != 0) { // readRandomLine is only excecuted when strlen(filename) != 0 /* Manual input */ curs_set(1); getnstr(gs->guessWord, MAXWORDLENGTH - 1); /* Reads the guessWord with a limit */ curs_set(0); - } else { - /* Random line from file */ - readRandomLine(filename, gs->guessWord); } } @@ -366,10 +365,16 @@ int centerDiff(int coordinate, char *str) { return coordinate - (len / 2); /* Integer division */ } -void readRandomLine(char *file, char *result) { - FILE *fp = fopen(file, "r"); +int readRandomLine(char *file, char *result) { + FILE *fp; int count = 0, wordlength = 0; char line[MAXWORDLENGTH]; + + fp = fopen(file, "r"); + if (fp == NULL) { + return 1; + } + srand(time(NULL)); while (fgets(line, MAXWORDLENGTH, fp) != NULL) { count++; @@ -381,6 +386,8 @@ void readRandomLine(char *file, char *result) { wordlength = strlen(result); result[wordlength - 1] = '\0'; fclose(fp); + + return 0; } void trollHitScreen(game_state *gs, hitfeed *hf, int hits) { diff --git a/hangman.h b/hangman.h index d444826..a70c3a1 100644 --- a/hangman.h +++ b/hangman.h @@ -62,7 +62,7 @@ void showStartScreen(game_state *gs); void startGame(game_state *gs, hitfeed *hf); void showHelp(game_state *gs); int centerDiff(int coordinate, char *str); -void readRandomLine(char *file, char *result); +int readRandomLine(char *file, char *result); void trollHitScreen(game_state *gs, hitfeed *hf, int hits); void addHitToFeed(hitfeed *hf, char *streak, int hit); void trollHandleImpressive(hitfeed *hf, game_state *gs, int hits);