My program stops after I guess a letter it is supposed to put it on the guess li
ID: 3908338 • Letter: M
Question
My program stops after I guess a letter it is supposed to put it on the guess line and display the letters that are correct. Language c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>
int main(void) {
const int MAX_MISSES = 7;
char guess[2];
char lettersGuessed[27];
char puzzlePhrase[50];
char displayPhrase[50];
int numOfMisses;
int numOfUnsolvedCharcters;
int i;
bool guessFound;
printf("Hangman Time!! ");
printf("-------------- ");
printf("Player 1 enter puzzle phrase(up to 50 characters): ");
gets_s(puzzlePhrase, 50);
for (i = 0; i <= 25; ++i) {
printf(" ");
}
strcpy_s(displayPhrase, 50, puzzlePhrase);
for (i = 0;i < strlen(displayPhrase); ++i) {
if (displayPhrase[i] != ' ') {
displayPhrase[i] = '_';
}
}
numOfUnsolvedCharcters = strlen(puzzlePhrase);
numOfMisses = 0;
strcpy_s(lettersGuessed, 27, "");
while ((numOfUnsolvedCharcters > 0) && (numOfMisses < MAX_MISSES)) {
if (numOfMisses == 0) {
printf("----------");
printf(" ");
printf("| | ");
for (i = 0;i < 7; i++) {
printf("| ");
}
printf("|");
printf("___________ ");
}
else if (numOfMisses == 1) {
printf("----------");
printf(" ");
printf("| | ");
printf(" O");
for (i = 0;i < 7; i++) {
printf("| ");
}
printf("|");
printf("___________ ");
}
else if (numOfMisses == 2) {
printf("----------");
printf(" ");
printf("| | ");
printf(" O");
printf(" /");
for (i = 0;i < 7; i++) {
printf("| ");
}
printf("|");
printf("___________ ");
}
else if (numOfMisses == 3) {
printf("----------");
printf(" ");
printf("| | ");
printf(" O");
printf(" /");
printf(" ''");
for (i = 0;i < 7; i++) {
printf("| ");
}
printf("|");
printf("___________ ");
}
else if (numOfMisses == 4) {
printf("----------");
printf(" ");
printf("| | ");
printf(" O");
printf(" /");
printf(" ''");
printf(" |");
for (i = 0;i < 7; i++) {
printf("| ");
}
printf("|");
printf("___________ ");
}
else if (numOfMisses == 5) {
printf("----------");
printf(" ");
printf("| | ");
printf(" O");
printf(" /");
printf(" ''");
printf(" |");
printf(" |");
for (i = 0;i < 7; i++) {
printf("| ");
}
printf("|");
printf("___________ ");
}
else if (numOfMisses == 6) {
printf("----------");
printf(" ");
printf("| | ");
printf(" O");
printf(" /");
printf(" ''");
printf(" |");
printf(" |");
printf(" /");
for (i = 0;i < 7; i++) {
printf("| ");
}
printf("|");
printf("___________ ");
}
else if (numOfMisses == 7) {
printf("----------");
printf(" ");
printf("| | ");
printf(" O");
printf(" /");
printf(" ''");
printf(" |");
printf(" /");
printf(" ''");
for (i = 0;i < 7; i++) {
printf("| ");
}
printf("|");
printf("___________ ");
}
printf("Guesses: %s ", lettersGuessed);//May need to change this to add %c
printf("Phrase: %s ", displayPhrase); //May need to change this to add %s
printf("Guess a letter:");
scanf_s("%s", guess);
while(!isalpha(guess[i])){
scanf_s("%s", guess);
}
strcat_s(lettersGuessed, 50, guess);
guessFound = false;
for (i = 0; i < strlen(puzzlePhrase); ++i) {
if (toupper(puzzlePhrase[i]) == toupper(guess[0])){
displayPhrase[i] == guess[0];
--numOfUnsolvedCharcters;
guessFound = true;
}
if (!guessFound) {
++numOfMisses;
}
}
printf("%s", displayPhrase);
if (numOfUnsolvedCharcters > 0) {
printf("NOT GOOD AT GUESSING I SEE - BETTER LUCK NEXT TIME :) ");
}
else {
printf("WINNER!!! ----- PLAY AGAIN ;) ");
}
return 0;
}
}
Explanation / Answer
The issue here is that the value of i is 7 while accepting the guess character.
while (!isalpha(guess[i]))
That must be reset to 0 like i = 0;because of that exception comes.
additionally we have to use gets_s to accept guess character array as using scanf_s() is not functioning as it should be due to unwanted characters in input stream buffer.
Also the dimension filed in strcat_s(lettersGuessed, 50 , guess); Instead of 50 it must be 2 as the dimension of source array guess so that stack corruption dont happen.
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.