#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define MAXGUESSES 5
// function declarations
void GameRules();
int SingleGame(char file_letter);
char RetrieveGuess();
int GuessedIt(char answer, char input_letter);
int main()
{
int PlayGames = 0, //Variable Declarations
i = 0; //Variable Declarations
char correctanswer; //Variable Declarations
GameRules(); //Call of GameRules Function
FILE *fp; //Opening File
fp = fopen("lettersin", "r"); //Opening File for Reading
printf("How many games would you like to play?1-4:"); //Prompting for Number of Games to Play
scanf("&d", &PlayGames); //Scanning number of games wished to be played, storing it in PlayGames
for (i = 0; i<PlayGames; i++) //For Loop that lasts until i=playgames
{
fscanf(fp, "%c", &correctanswer); //function to scan 1 letter from lettersin.txt
int SingleGame(correctanswer); //Play one game
if (SingleGame == 1) //if Single Game returns 1, you win
{
printf("You Win!");
}
else if (SingleGame == 0) //If Single Game returns 0, you lose
{
printf("You Lose");
}
}
fclose(fp); //Closes the File
return 0;
}
void GameRules() //Function that prints the Rules
{
printf("This is the Letter Game. The goal is to guess the correct letter within 5 attempts. After each guess you will be told whether the letter you attempted to guess comes before or after the letter actually guessed.\n");
}
char RetrieveGuess() //Function to prompt for a guess, then store the guess in an integer that is returned by the function when called
{
char a;
printf("Enter a letter");
scanf("%c", &a);
return a;
}
int GuessedIt(char answer, char input_letter) //Function that returns 1 when the answer is correct, or suggests where the correct answer is if the guess is incorrect
{
if (answer == input_letter) //if the guess is the same as the answer, return 1
{
return 1;
}
else if (answer > input_letter) //if the guess is incorrect, suggest on how to improve and return 0
{
printf("the correct letter comes before your guess"); return 0;
}
else
{
printf("the correct letter comes after your guess"); return 0;
}
}
int SingleGame(char file_letter) //Function to play 1 game
{
int numGuesses = 0; //Variable Declarations
char b;
while (numGuesses < MAXGUESSES) //While Loop that repeats until numguesses=maxguesses
{
b=RetrieveGuess(); //sets b equal to the value RetrieveGuess returns
GuessedIt(file_letter, b); //uses b and whichever value is entered into SingleGame to determine wheter the answer is correct
if (GuessedIt == 1) //If function that returns 1 if the guess is correct and ends the function, otherwise it increments numguesses
{
return 1;
numGuesses = 6;
}
else numGuesses = numGuesses++; //increments numguesses to end loop after 5 guesses
}
if (numGuesses == 5) //returns 0 if the letter is not guessed within 5 tries
{
return 0;
}
}
当我尝试运行我的代码时,我没有收到任何错误消息,但是在输入我想玩的游戏数量后,我的代码结束了。没有错误,除了“无法找到或打开PDB文件”,我正在使用Microsoft Visual Studio 2013 Express
答案 0 :(得分:0)
它是scanf("%d", &PlayGames);
(将&amp; d更改为%d)
答案 1 :(得分:0)
在main函数中你使用单游戏函数名作为变量...它应该抛出一个错误,因为你没有声明任何这样的变量..而不是放置函数调用 if和else条件中的单游戏(correctanswer)。
答案 2 :(得分:0)
您的代码根本不应该编译。我很惊讶你声称它确实如此。您正在使用函数,就像它们是变量一样。
但无论如何,在解决了所有这些问题之后,代码确实会过早地结束。原因是scanf("&d", &PlayGames);
中的拼写错误。 int格式说明符应该是%d
而不是&d
。
由于这个拼写错误,PlayGames的值永远不会设置并保持为0。