Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

This problem is about writing a puzzle solver c code for Microsoft visual studio

ID: 652336 • Letter: T

Question

This problem is about writing a puzzle solver c code for Microsoft visual studio. It can be found by following links(indluding three images):

https://drive.google.com/file/d/0B7WUYmW3LyL6M3RiekpmU0ZObWc/view?usp=sharing

https://drive.google.com/file/d/0B7WUYmW3LyL6REV5aWlnSUxEMkk/view?usp=sharing

https://drive.google.com/file/d/0B7WUYmW3LyL6aDRIWnN2UlRZMjQ/view?usp=sharing

the input file can be found at this link:

https://drive.google.com/file/d/0B7WUYmW3LyL6bXRhQVBvNVlCb2M/view?usp=sharing

Dont forget to download the text file and copy it to the project file.

Someone came up with this solution(Not correct,but parts of them are reasonable):

Pls ONLY USE stdio,string,stdlib for this code!

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>

typedef int bool;

enum {
   false, true
};

//read fortune codes from file and store in the string 2D array
char *fortune_codes1[300];
char *fortune_codes2[300];


//count of number of codes
int size = 0;

void readFromText() {
   //count of number of codes
   int count = 0;
   char *line;
   size_t len = 0;
   //read the file: fortune_codes.txt
   FILE *fp;
   fp = fopen("fortune_codes.txt", "r");

   if (fp != NULL) {

       //read each line and corresponding code into the array: fortune_codes
       while (!feof(fp)) {
           //get the first clue in text
           fgets(fortune_codes1[count], len, fp);

           fgets(fortune_codes2[count], len, fp);
           //increase count
           ++count;
       }

       size = count;
   }
   else {
       printf("Sorry.. Couldnot open the file ! ");
   }
}

bool fillGuessedWord(char *word, char *guess, char *guessedLetters, int len, char letter) {

   bool isGameOver = true; //game over is default to true
   int contain = 0; //this checks the number of times the letter exists int the word
   //below we add the guessed letter to end of the array and also add delimiter
   int i = 0;
   while (guessedLetters[i] != '') {
       i++;
   }
   guessedLetters[i] = letter;
   guessedLetters[i + 1] = '';

   for (int i = 0; i < len; i++) {
       //checks whether it exists by converting all the input guessed letter to upper form
       if (word[i] == (char)toupper(letter)) {
           guess[i] = word[i];
           contain++; //increases contain by 1
       }

       if (guess[i] == '_')//if _ is found then game is not over
           isGameOver = false;
   }

   //now based on contain value, the strings are displayed
   if (contain)
       printf("Letter %c was found %d times in the secret puzzle", letter, contain);
   else
       printf("Letter %c is not a part of the secret puzzle", letter);

   //then the guessed word is displayed
   printf(" %s ", guess);

   //then the already guessed words are displayed
   printf("Letter already guessed: ");

   i = 0;
   while (guessedLetters[i] != '') {
       printf("%c ", guessedLetters[i++]);
   }
   printf(" ");

   //return isgameOver flag here
   return isGameOver;
}

void playGame() {
   //get random codes from the data in file, stored in fortune_codes variable 2D array
   int index = (rand() / size);

   char letter;
   //randomly select the clue and guess word
   char *clue = (char *)malloc(strlen(fortune_codes1[index]));
   strcpy(clue, fortune_codes1[index]);
   char *word = (char *)malloc(strlen(fortune_codes2[index]));
   strcpy(word, fortune_codes2[index]);


   int len = strlen(fortune_codes2[index]); //word size

   char *guess = (char *)malloc(strlen(word)); //the word guessed with _ in the string
   char guessedLetters[100]; // all the guessed letters
   guessedLetters[0] = ''; // acts as a delimiter

   //initialization of guess word by adding _ where the letters are to be guessed
   for (int i = 0; i <= len; i++) {
       if (word[i] >= 'A' && word[i] <= 'Z')
           guess[i] = '_';
       else
           guess[i] = word[i];
   }


   //start of game
   printf("Hi, let's play hangman. The clue is: %s ", clue);


   printf("The secret puzzle is: ");
   printf("%s ", guess);

   bool isGameOver = false; //flag to get whether game is over or not
   while (!isGameOver) {
       //guess a letter
       printf("Guess a letter: ");
       letter = fgetc(stdin);
       while (fgetc(stdin) != ' ');

       //call this function to check the letter and also check whether the game is over or not
       isGameOver = fillGuessedWord(word, guess, guessedLetters, len, letter);


   }

   //print when game is over
   printf(" Congratulations! You solved the puzzle: %s ", word);


}

int main() {
   readFromText();

   playGame();

   return 0;
}

The code itself doesn't work. Now I only want #include <stdio.h> #include <stdlib.h> #include <string.h>(three libraries) appear in the code. Pls modify the code or redo it(if you need to) to make sure it works and yield sample outputs. Pls run it before post the answer.

Explanation / Answer

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<string.h>

typedef int bool;

enum
{
false, true
};

//read fortune codes from file and store in the string 2D array
char *fortune_codes1[300];
char *fortune_codes2[300];


//count of number of codes
int size = 0;

void readFromText()
{
//count of number of codes
int count = 0;
char *line;
size_t len = 0;
//read the file: fortune_codes.txt
FILE *fp;
fp = fopen("fortune_codes.txt", "r");

if(fp != NULL)
{

//read each line and corresponding code into the array: fortune_codes
while(!feof(fp))
{
//get the first clue in text
getline(&fortune_codes1[count], &len, fp);

getline(&fortune_codes2[count], &len, fp);


//increase count
++count;
}

size = count;
}
else
{
printf("Sorry.. Couldnot open the file !! ");
}
}

bool fillGuessedWord(char *word, char *guess, char *guessedLetters, int len, char letter)
{

bool isGameOver = true; //game over is default to true
int contain = 0; //this checks the number of times the letter exists int the word
//below we add the guessed letter to end of the array and also add delimiter
int i = 0;
while(guessedLetters[i] != '')
{
i++;
}
guessedLetters[i] = letter;
guessedLetters[i + 1] = '';

for(int i = 0; i < len; i++)
{
//checks whether it exists by converting all the input guessed letter to upper form
if (word[i] == (char) toupper(letter)) {
guess[i] = word[i];
contain++; //increases contain by 1
}

if (guess[i] == '_')//if _ is found then game is not over
isGameOver = false;
}

//now based on contain value, the strings are displayed
if (contain)
printf("Letter %c was found %d times in the secret puzzle", letter, contain);
else
printf("Letter %c is not a part of the secret puzzle", letter);

//then the guessed word is displayed
printf(" %s ", guess);

//then the already guessed words are displayed
printf("Letter already guessed: ");

i = 0;
while (guessedLetters[i] != '') {
printf("%c ", guessedLetters[i++]);
}
printf(" ");

//return isgameOver flag here
return isGameOver;
}

void playGame()

{
//get random codes from the data in file, stored in fortune_codes variable 2D array
int index = (rand() / size);
char letter;
//randomly select the clue and guess word
char *clue = (char *) malloc(strlen(fortune_codes1[index]));
strcpy(clue, fortune_codes1[index]);
char *word = (char *) malloc(strlen(fortune_codes2[index]));
strcpy(word, fortune_codes2[index]);
int len = strlen(fortune_codes2[index]); //word size
char *guess = (char *) malloc(strlen(word)); //the word guessed with _ in the string
char guessedLetters[100]; // all the guessed letters
guessedLetters[0] = ''; // acts as a delimiter

//initialization of guess word by adding _ where the letters are to be guessed
for(int i = 0; i <= len; i++)
{
if (word[i] >= 'A' && word[i] <= 'Z')
guess[i] = '_';
else
guess[i] = word[i];
}
//start of game
printf("Hi, let's play hangman. The clue is: %s ", clue);

printf("The secret puzzle is: ");
printf("%s ", guess);

bool isGameOver = false; //flag to get whether game is over or not
while (!isGameOver) {
//guess a letter
printf("Guess a letter: ");
letter = fgetc(stdin);
while (fgetc(stdin) != ' ');

//call this function to check the letter and also check whether the game is over or not
isGameOver = fillGuessedWord(word, guess, guessedLetters, len, letter);


}

//print when game is over
printf(" Congratulations! You solved the puzzle: %s ", word);


}

int main()
{
readFromText();

playGame();

return 0;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote